我在IIS8中有一个WCF服务主机,我想使用net.tcp绑定。
我有这个配置:
的Web.config:
<service behaviorConfiguration="MyBehavior"
name="DecryptService.EmailCenterDecryptTCP">
<host>
<baseAddresses>
<add baseAddress="net.tcp://XX.XX.XX.XX:808/VirtualFolder/Service.svc" />
</baseAddresses>
</host>
<endpoint address=""
binding="netTcpBinding"
bindingConfiguration="portSharingBinding"
name="MyServiceEndpoint"
contract="ServiceNamespace.IService">
</endpoint>
<endpoint address="mextcp"
binding="mexHttpBinding"
bindingConfiguration=""
name="MyServiceMexTcpBidingEndpoint"
contract="IMetadataExchange" />
</service>
当我尝试在与IIS8相同的机器上使用该服务时,使用以下配置正常工作:
<client>
<endpoint address="net.tcp://YY.YY.YY.YY:808/VirtualFolder/Service.svc"
binding="netTcpBinding" bindingConfiguration="MyServiceEndpoint"
contract="ServiceReference1.IService" name="MyServiceEndpoint" />
</client>
YY.YY.YY.YY是机器的本地IP,但是当我尝试在另一台机器中使用该服务时,将YY.YY.YY.YY更改为机器的外部IP(ZZ.ZZ.ZZ.ZZ)运行IIS8我得到以下错误:
There was no endpoint listening at net.tcp://ZZ.ZZ.ZZ.ZZ/VirtualFolder/Service.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.
任何想法? 谢谢,抱歉我的英文不好
修改
我创建了一个运行ServiceHost的控制台应用程序,取代了IIS,使用此配置,它可以在Internet上运行
var svh = new ServiceHost(typeof (Service));
svh.AddServiceEndpoint(typeof (ServiceNamespace.IService), new NetTcpBinding(SecurityMode.None), "net.tcp://serverLocalIp:808");
svh.Open();
Console.WriteLine("SERVER - Running...");
stopFlag.WaitOne();
Console.WriteLine("SERVER - Shutting down...");
svh.Close();
Console.WriteLine("SERVER - Shut down!");
任何想法IIS通过互联网运行相同的服务有什么问题吗?本地工作。 感谢
答案 0 :(得分:4)
您还需要设置IIS以接收Net.TCP连接。
在IIS应用程序的Advanced Settings
下,然后在Enabled Protocols
下,确保http,net.tcp
注意没有空格,如果有空格则会失败。
http://blogs.msdn.com/b/swiss_dpe_team/archive/2008/02/08/iis-7-support-for-non-http-protocols.aspx
答案 1 :(得分:2)
如果有一天突然开始收到此错误,则与另一个劫持net.tcp端口的进程有关。以我为例,它是808端口。这是大约三天后我发现的方法-是的,这就是我现在在Google上所做的,尝试找出别人的烦恼而不是自己做。
无论如何:
这是有道理的,因为某些其他进程已经在使用端口808,因此它不适用于 Net.TCP 。
这时我有两个选择:
幸运的是,他们已经为驱动程序做了更新,所以我只是下载了该驱动程序,并从here安装了它。
重新启动,然后再次运行以下命令,以确保该端口可用于net.tcp:
答案 2 :(得分:0)
简单的答案,在IIS下将端口号更改为->编辑绑定-> net.tcp。我将其更改为12345,这解决了我的问题。
这是与使用默认端口808的另一个进程有关的问题,如上文中所述。 如果这样做没有帮助,请检查上面的答案和休憩程序。