WCF在负载均衡器后面与PHP互操作

时间:2009-11-02 18:37:06

标签: php wcf web-services interop load-balancing

我正在尝试帮助客户与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进行互操作时应该注意什么?

2 个答案:

答案 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)

您可以尝试一些事项:

  • 直接针对服务测试php客户端,以验证负载均衡器是否存在问题。
  • 检查运行WCF服务的计算机上的IIS和事件日志