在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在互联网上运行相同的服务有什么问题吗?在本地工作。由于

在net.tcp:上没有端点监听

您还需要设置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

如果有一天您开始突然收到这个错误,那么它与另一个进程劫持网络有关。tcp端口。在我的例子中是808端口。这是我在大约3天后发现的——是的,这就是我现在所做的,谷歌并试图找出别人的问题,而不是做我自己的工作。

不管怎么说

:


  1. 。TCP依赖于2个正在运行的windows服务。转到services并找到Net。Tcp侦听器适配器Net。Tcp端口共享服务如果您没有看到它们,那么这个答案不适用于您。表示您没有激活控制面板中的功能打开或关闭Windows功能。你会发现很多关于在线启用的信息。
  2. 停止网。Tcp端口共享服务,并在弹出的停止其他服务中单击
  3. 重启两个服务
  4. 打开事件查看器>Windows日志>系统并查看是否在Source列中看到SMSvcHost 4.0.0.0(您的版本可能不同)的任何错误。协议"net"的激活服务"NetTcpActivator"中出现错误。在尝试侦听站点'1'时,Tcp ',因此该协议暂时被禁用。是的,谢谢MS!您启动了一个服务,但没有真正启动它,只是在事件查看器中添加了一条消息?太棒了!因为在windows服务启动时告诉我太难了,对吗?好吧,不管怎样,我们继续吧。
  5. 然后我需要根据上面4中的错误找出使用端口的内容。因此,我运行了以下命令(您可能需要在管理模式下启动命令提示符)。
    • 运行netstat -ano | findstr "808"并注意最后列中的数字。这些是使用端口的进程id。
    • 运行tasklist/fi "pid eq 9",其中9为上述步骤的进程ID。
  6. 现在您知道了正在使用端口的进程名,您需要搜索并找出该进程的用途。在我的情况下,它是一个使用端口808的英特尔图形驱动程序:OneApp.IGCC.WinService.exe。

这是有意义的,因为其他进程已经在使用808端口,所以它不能用于Net.TCP


我有两个选择:

  1. 禁用该进程
  2. 也许我可以看看我是否可以改变端口。

幸运的是,他们已经有一个更新的驱动程序,所以我只是下载它并从这里安装。


重新启动,然后再次运行以下命令,以确保端口可供net.tcp使用:

  1. 运行netstat -ano | findstr "808"并注意最后列中的数字。这些是使用端口的进程id。
  2. 运行tasklist/fi "pid eq 9",其中9将是上述步骤的进程ID。现在你应该看到SMSvcHost.exe,这就是我们想要的。

简单的回答,更改IIS下的端口号->编辑绑定->网TCP连接到别的东西。我把它改成12345,这就解决了我的问题。

这是与另一个进程使用默认端口808相关的问题,如上所述。如果没有帮助,请检查上面的答案并执行以下程序。