首先,我在WCF方面不擅长。 我有一个在WindowsService中托管的WCF服务。 从某个时候起,服务由于异常而停止运行:
HTTP无法注册URL http://+:8092/MyService/,因为另一个应用程序正在使用TCP端口8092。
有许多机器可以启动此服务,但最需要(客户)的机器不能。 我在这个网站或其他任何地方看过很多帖子,但找不到解决方案。 我从来没有看到像“它帮助我”这样的帖子。 我已经好几天了,请帮忙。
来自配置文件的数据:
<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>
答案 0 :(得分:7)
您正在与wsDualHttpBinding
使用WCF双工通信。在这种情况下,WCF在端口8092上创建HTTP套接字以服务客户端回调。显然客户端与IIS 5.X冲突。 (我猜你有XP和IIS 5.x)
要解决此问题,您必须在客户端的绑定配置中提供clientBaseAddress
并指定其他端口。
示例客户端配置:
我希望这确实是您机器中的问题,请通知我此解决方案的结果。
祝你好运: - )答案 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下工作时遇到问题。
让我知道你的结果: - )