我正在尝试帮助客户与PHP客户端进行互操作,但我们在IIS服务器场前面有一个负载均衡器。因此,当您实际查看.svc?wsdl时,您将获得此WSDL中列出的特定服务器。然后,当我的客户试图使用类似的东西生成客户时
$client = new SupplierService();
他们得到了服务器场中特定服务器的超时(而不是我们给他们指向负载均衡器本身的uri)
我甚至手工讨论了WSDL,使用svcutil生成了一个.net客户端来证明这个WSDL应该足以通过负载均衡器获得有效的调用(并且.net客户端使用这个平面WSDL生成的客户端工作)
在我完成这项工作之后,我通过电子邮件向客户端发送了这个平面WSDL文件,以便从中生成一个有效的PHP客户端(不是导致问题的uri),它只是挂起。没有错误消息或例外情况......
当我看到使用Wireshark发现的实际消息时,.net和php客户端SOAP数据看起来几乎完全相同。但.net客户端工作,php客户端挂起,没有错误被抛回客户端或通过.NET登录
我可能在这里错过了什么,或者在负载平衡器后面与WCF进行互操作时应该注意什么?
答案 0 :(得分:1)
如果您在这样的平衡器后面保持平衡,如果您希望在WSDL中发出正确的服务器名称,则需要将<host>
部分实际添加到服务配置中,如下所示:
<service ...>
<host>
<baseAddresses>
<add baseAddress="http://subdomain.yourexternaldns.com" />
<add baseAddress="https://subbomain.yourexternaldns.com" />
</baseAddresses>
</host>
</service>
您还需要确保在IIS中配置了主机标头,以使其正常工作,并确保您的blancer未经过主机标头的传递。
答案 1 :(得分:0)
您可以尝试一些事项: