bai*_*alk 8 .net wcf hostheaders wcf-binding wcf-endpoint
我有一个在LAN上正常工作的WCF服务,但是当尝试从外部访问它时,服务引用失败.
我的WCF服务托管在使用静态IP无域的win2k3盒子上.
小智 15
这对我有用.在配置文件中
< serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
< / system.serviceModel >
Run Code Online (Sandbox Code Playgroud)
如果它设置为false,我就会得到那个疯狂的计算机替换.
multipleSiteBindingsEnabled="true" 似乎是我必须做的一切,因为它应该工作.
我正在研究一种重用 HTTP 请求中的 Host 标头的方法。在我看来,这应该适用于开发和生产。
事实证明很简单:
<behaviors>
<serviceBehaviors>
<behavior name="...">
...
<useRequestHeadersForMetadataAddress />
</behavior>
</serviceBehaviors>
</behaviors>
Run Code Online (Sandbox Code Playgroud)
这样,如果客户端可以访问 WSDL 端点,则可以确保可以使用相同的基本 url 访问所有关联的 wsdl/xsd 资源。
经过一番挖掘后,我找到了这个问题的答案 - 这是我发现的,希望它可以节省其他人的时间和麻烦。
1.) 将 IP 添加到端点地址并添加带有基本 IP 地址的主机名,如下所示:
<endpoint
address="http://xx.xx.xx.xx/ServiceApp/Service.svc"
binding="basicHttpBinding" contract="IService">
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://xx.xx.xx.xx/ServiceApp/" />
</baseAddresses>
</host>
Run Code Online (Sandbox Code Playgroud)
这曾经足以使我的服务引用工作,但迪斯科文件开始返回计算机名称而不是 IP(我认为这是更新到 .NET 4.0 之后)。
2.) 如果您有域名 (www.myDomain.com),请将其添加到 IIS 中的主机标头中。
3.) 将 IP 地址和计算机名称添加到客户端主机文件中(但是,简单的修复并不总是能够让所有客户端将其添加到其主机文件中)
4.)我发现的最佳解决方案是按照此处的“Timetheos”帖子实现ServiceHosts Factory属性:http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c7fd51a2-773e-41d4 -95a0-244e925597fe
这对我来说效果很好,因为我可以在本地测试开发和调试我的服务库,然后使用服务应用程序将服务部署到我的开发服务器,并且在发布后无需更改任何配置文件。
整个过程完全是一场噩梦,我不希望任何人遇到这种情况,所以如果您处于同样的情况并且需要有关上述几点的更多信息,请与我们联系!
| 归档时间: |
|
| 查看次数: |
21730 次 |
| 最近记录: |