WCF+Net.TCP问题集

1、开发Net.tcp协议应用,需要IIS7.0作servicehost,并设置好net.tcp协议。

IIS中如何添加net.tcp协议,参其它文章。

手动添加已启用的协议,net.tcp

否则出现

错误。

 

启用WCF Activation

WCF Activation是Windows的一个可选组件, 默认情况下并没有安装, 只有先装上它, IIS才能支持非HTTP管道的WCF调用.

在控制面板->程序->打开或关闭Windows功能中, 找到.Net framework 3.5 ( 或4.5, 如下图)

系统中要启动以下服务

 

2、创建服务和一般WCF服务一样,服务要被能发现,web.config中behaviors设置,这里的name=""。

<behaviors><serviceBehaviors>

<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>

<behavior name="service1behavior ">....</behavior>

</behaviors></serviceBehaviors>  否则出现

3、开发环境中引用服务可采用http://localhost:80/chatservice.svc的形式,这样只是为了VS2010能得到服务端的元数据,真正运行起来要修改服务端和客户端配置,web.config改成address="",ServiceReferences.ClientConfig改成address="net.tcp://localhost:4502/chatservice.svc",

为什么web.config改成address=""?,因为IIS作为servicehost,服务端baseAddress由IIS掌握(控制台自建host除外),web.config中加address反倒会被IIS作为前缀出现下面错误。

所以干脆把web.config改成address="",一了百了。

4、不用尝试在IE地址栏输入net.tcp://localhost:4502/chatservice.svc看服务,看不到的,只认http://localhost:80/chatservice.svc的形式。但在开发环境中引用服务时可输入net.tcp://localhost:4502/chatservice.svc,不管引用http还是net.tcp,自动生成的ServiceReferences.ClientConfig都是带net.tcp的

 

5、如果用silverlight作客户端,需要跨域文件,并且服务的端口必须是4502-4534,没办法silverlight特点。否则出现

跨域文件中也有端口设置 clientaccesspolicy.xml

<?xml version="1.0" encoding ="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from>
<domain uri="*" />
</allow-from>
<grant-to>
<socket-resource port="4502-4503" protocol="tcp" />
</grant-to>
</policy>
</cross-domain-access>
</access-policy>

 

6.出现"协定需要双工,但是绑定“BasicHttpBinding”不支持它或者因配置不正确而无法支持它。"

检查<service name="实现服务的类名">是否正确。

 

 

 

在VS开发中感觉不到net.tcp存在,毕竟它只与通讯有关。

 

posted on 2015-03-05 18:01  zsfwh  阅读(393)  评论(0)    收藏  举报