HTTP无法注册URL ...因为TCP端口...正由另一个应用程序使用

时间:2011-09-27 16:11:42

标签: wcf http wcf-binding

首先,我在WCF方面不擅长。 我有一个在WindowsService中托管的WCF服务。 从某个时候起,服务由于异常而停止运行:

HTTP无法注册URL http://+:8092/MyService/,因为另一个应用程序正在使用TCP端口8092。

  • 没有什么可以使用这个端口,它对我试过的任何端口也是如此。
  • 已配置SSL证书。

有许多机器可以启动此服务,但最需要(客户)的机器不能。 我在这个网站或其他任何地方看过很多帖子,但找不到解决方案。 我从来没有看到像“它帮助我”这样的帖子。 我已经好几天了,请帮忙。

来自配置文件的数据:

<system.serviceModel>
    <services>
      <service name="MyCompany.MyApp.MyAppService" behaviorConfiguration="MetadataSupport">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8092/MyAppService" />
            <add baseAddress="net.tcp://localhost:8093/MyAppService" />
            <add baseAddress="net.pipe://localhost/" />
          </baseAddresses>
        </host>
        <endpoint binding="wsDualHttpBinding" contract="MyCompany.MyApp.IMyAppService" />
        <endpoint binding="netTcpBinding" contract="MyCompany.MyApp.IMyAppService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <endpoint address="tcpmex" binding="mexTcpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MetadataSupport">
          <!-- To avoid disclosing metadata information, 
          set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="True" httpGetUrl="" />
          <!-- To receive exception details in faults for debugging purposes, 
          set the value below to true.  Set to false before deployment 
          to avoid disclosing exception information -->
          <serviceDebug httpHelpPageEnabled="True" includeExceptionDetailInFaults="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

3 个答案:

答案 0 :(得分:7)

您正在与wsDualHttpBinding使用WCF双工通信。在这种情况下,WCF在端口8092上创建HTTP套接字以服务客户端回调。显然客户端与IIS 5.X冲突。 (我猜你有XP和IIS 5.x)

要解决此问题,您必须在客户端的绑定配置中提供clientBaseAddress并指定其他端口。

示例客户端配置: Client configuration snippet

我希望这确实是您机器中的问题,请通知我此解决方案的结果。

祝你好运: - )

答案 1 :(得分:0)

尝试以具有管理员权限的人身份运行Windows服务。某些版本的Windows(2008 / Vista及以上版本)对于谁可以打开端口非常挑剔。如果这有帮助,那么您当然不希望以管理员身份实际运行该服务,但它至少会指向您的权限方向。

另外,您提到了SSL证书,但它是一个'http'网址,而不是'https'。这似乎很不寻常。

答案 2 :(得分:0)

我建议执行以下诊断步骤:

尝试以自主方式托管WCF服务(控制台应用程序):

  • 使用课程HttpServiceHost
  • 使用此绑定:var binding = new HttpBinding(HttpBindingSecurityMode.Transport);
  • AddServiceEndpoint(typeof(YourServiceClass),binding,"https://url...");

如果它适用于您,则似乎您在配置WCF服务以在Managed-Windows Service下工作时遇到问题。

让我知道你的结果: - )