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

时间:2013-04-05 16:26:51

标签: c# wcf net.tcp iis-8

我在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通过互联网运行相同的服务有什么问题吗?本地工作。 感谢

3 个答案:

答案 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上所做的,尝试找出别人的烦恼而不是自己做。

无论如何:


  1. Net.TCP取决于2个Windows服务正在运行。转到服务并找到 Net.Tcp侦听器适配器 Net.Tcp端口共享服务如果您没有看到它们,则此答案对您不适用。这表示您尚未在控制面板打开或关闭Windows功能中激活该功能。您会找到很多有关在线启用的信息。
  2. 停止 Net.Tcp端口共享服务,然后在停止其他服务弹出窗口中单击
  3. 重新启动两个服务。
  4. 打开事件查看器> Windows日志>系统,看看在 Source <中是否看到 SMSvcHost 4.0.0.0 的任何错误(您的版本可能有所不同)。 / em>列。我遇到了此错误:尝试侦听站点“ 1”时,协议“ net.tcp”的激活服务“ NetTcpActivator”发生错误,因此该站点的协议暂时被禁用。 是,谢谢女士!您启动了一项服务,但并未真正启动,只是向事件查看器添加了一条消息?大!因为在Windows服务启动过程中告诉我太难了,对吗?好的,无论如何,让我们继续吧。
  5. 然后,我需要根据上面4中的错误找出正在使用该端口的端口。因此,我运行了以下命令(您可能需要在admin模式下启动命令提示符。)
    • 运行 netstat -ano | findstr“ 808” 并记下该列中的数字。这些是使用端口的进程ID。
    • 运行任务列表| 9 ,其中9是上面步骤中的进程ID。
  6. 现在您知道正在使用端口的进程名称,您需要访问Google并找出该进程的用途。就我而言,这与使用端口808:OneApp.IGCC.WinService.exe的英特尔图形驱动程序有关。

这是有道理的,因为某些其他进程已经在使用端口808,因此它不适用于 Net.TCP


这时我有两个选择:

  1. 禁用该过程
  2. 也许我可以更改其端口。

幸运的是,他们已经为驱动程序做了更新,所以我只是下载了该驱动程序,并从here安装了它。


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

  1. 运行 netstat -ano | findstr“ 808” 并记下该列中的数字。这些是使用端口的进程ID。
  2. 运行任务列表| 9 ,其中9是上述步骤中的进程ID。现在,您应该看到我们想要的 SMSvcHost.exe

答案 2 :(得分:0)

简单的答案,在IIS下将端口号更改为->编辑绑定-> net.tcp。我将其更改为12345,这解决了我的问题。

这是与使用默认端口808的另一个进程有关的问题,如上文中所述。 如果这样做没有帮助,请检查上面的答案和休憩程序。