在net.tcp:上没有端点监听
本文关键字:端点 监听 net tcp | 更新日期: 2023-09-27 18:07:45
我在IIS8中有一个WCF服务主机,我想使用一个网络。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更改为运行IIS8的机器的外部IP (ZZ.ZZ.ZZ.ZZ),我得到以下错误:
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,并使用此配置,它可以在互联网上工作
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在互联网上运行相同的服务有什么问题吗?在本地工作。由于
您还需要设置IIS来接收Net。TCP连接。
在您的IIS应用程序的Advanced Settings
下,然后在Enabled Protocols
下确保您有http,net.tcp
,注意没有空间,如果您有空间,它将失败
如果有一天您开始突然收到这个错误,那么它与另一个进程劫持网络有关。tcp端口。在我的例子中是808端口。这是我在大约3天后发现的——是的,这就是我现在所做的,谷歌并试图找出别人的问题,而不是做我自己的工作。
不管怎么说:
- 。TCP依赖于2个正在运行的windows服务。转到services并找到Net。Tcp侦听器适配器和Net。Tcp端口共享服务。如果您没有看到它们,那么这个答案不适用于您。表示您没有激活控制面板中的功能打开或关闭Windows功能。你会发现很多关于在线启用的信息。
- 停止网。Tcp端口共享服务,并在弹出的停止其他服务中单击是。
- 重启两个服务
- 打开事件查看器>Windows日志>系统并查看是否在Source列中看到SMSvcHost 4.0.0.0(您的版本可能不同)的任何错误。协议"net"的激活服务"NetTcpActivator"中出现错误。在尝试侦听站点'1'时,Tcp ',因此该协议暂时被禁用。是的,谢谢MS!您启动了一个服务,但没有真正启动它,只是在事件查看器中添加了一条消息?太棒了!因为在windows服务启动时告诉我太难了,对吗?好吧,不管怎样,我们继续吧。
- 然后我需要根据上面4中的错误找出使用端口的内容。因此,我运行了以下命令(您可能需要在管理模式下启动命令提示符)。
- 运行netstat -ano | findstr "808"并注意最后列中的数字。这些是使用端口的进程id。
- 运行tasklist/fi "pid eq 9",其中9为上述步骤的进程ID。
现在您知道了正在使用端口的进程名,您需要搜索并找出该进程的用途。在我的情况下,它是一个使用端口808的英特尔图形驱动程序:OneApp.IGCC.WinService.exe。
这是有意义的,因为其他进程已经在使用808端口,所以它不能用于Net.TCP。
我有两个选择:
- 禁用该进程
- 也许我可以看看我是否可以改变端口。
幸运的是,他们已经有一个更新的驱动程序,所以我只是下载它并从这里安装。
重新启动,然后再次运行以下命令,以确保端口可供net.tcp使用:
- 运行netstat -ano | findstr "808"并注意最后列中的数字。这些是使用端口的进程id。
- 运行tasklist/fi "pid eq 9",其中9将是上述步骤的进程ID。现在你应该看到SMSvcHost.exe,这就是我们想要的。
简单的回答,更改IIS下的端口号->编辑绑定->网TCP连接到别的东西。我把它改成12345,这就解决了我的问题。
这是与另一个进程使用默认端口808相关的问题,如上所述。如果没有帮助,请检查上面的答案并执行以下程序。