我已经尝试了一个多星期而没有取得任何成功,使用netTcpBinding来托管一个非常简单的类似HelloWorld的wcf服务。
使用http,一切正常。我甚至可以从远程计算机访问我的服务。但是出现了tcp问题。
我已经执行了我应该执行的所有步骤,以便在WAS中托管我的服务:
启用.Net 3.0功能,包括http和非http激活
我已将“网络服务”和“IIS_IUSRS”授予包含该网站的文件夹以下权限:
在防火墙中打开de端口8100和8086.
在IIS管理器/操作/绑定中,设置了以下绑定:
在IIS管理器/管理网站/高级设置中,http和net.tcp协议均已启用。
我遇到的原始问题是我能够通过http到达服务但是在尝试使用tcp时出现以下错误:
“无法分派消息,因为端点地址为'net.tcp://myDomain/HelloWorld.Hello.svc'的服务无法用于协议地址。”
我在这个网站上发现了一个帖子,其作者遇到了同样的问题,并通过重新安装.net 3.0功能解决了这个问题。所以我尝试了。我还尝试重新安装IIS 7.0以防万一。 现在,情况比起初时更糟糕。如果我在我的Web.Config中使用tcpBinding配置端点我甚至无法使用IE访问我的服务的http地址!我收到以下消息:
无法找到与绑定NetTcpBinding的端点匹配scheme net.tcp的基址。注册的基地址方案是[http]。
Web.Config文件如下:
name="HelloWorld.Hello">
<host>
<baseAddresses>
<add baseAddress="http://myDomain:8100/HelloWorld/" />
<add baseAddress="net.tcp://myDomain:8086/HelloWorld/" />
</baseAddresses>
</host>
<endpoint address=""
binding="wsHttpBinding"
contract="HelloWorld.IHello"
bindingConfiguration="httpInseguro">
</endpoint>
<endpoint address=""
binding="netTcpBinding"
contract="HelloWorld.IHello"
bindingConfiguration="netTcpInseguro">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name ="httpInseguro">
<security mode ="None" />
</binding>
</wsHttpBinding>
<netTcpBinding>
<binding name ="netTcpInseguro">
<security mode ="None" />
</binding>
</netTcpBinding>
</bindings>
和.svc文件是这样的:
有谁能请给我一个关于发生了什么的线索?我真的不知道还能做什么。这是一个真正的头脑,因为使用http绑定不是一个选项。 提前谢谢。
答案 0 :(得分:3)
您需要通过调用appcmd.exe
:
%windir%\system32\inetsrv\appcmd.exe set site
"Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='*']
查看MSDN documenation或Michele Leroux Bustamante article on this topic - 它包含您需要的所有信息。
马克
答案 1 :(得分:1)
为了你的回答和链接,请你。我会检查一下。 我忘了告诉,但我已经启用了TCP托管。 有人建议我将其添加到配置文件中:
<endpoint address="mextcp" binding="mexTcpBinding" contract="IMetadataExchange"/>
现在它正常工作。 最好的问候,
的Gonzalo