使用PHP调用具有多个绑定的WCF Web服务

Gra*_*ark 8 php wcf soap

我有一个WCF Web服务,它允许使用用户名和密码身份验证通过HTTPS进行基本HTTP和WS-HTTP客户端.这是通过在同一服务上使用两个绑定来实现的.

因此,服务位于https://foo.com/Service.svc,基本HTTP(SOAP 1.1)端点为https://foo.com/Service.svc/Unp11,WS-HTTP(SOAP 1.2)端点是https://foo.com/Service.svc/Unp.

客户端正在尝试使用其内置的SOAP支持通过PHP 5访问此Web服务,并且无法连接到该服务.他不断收到HTTP 400(错误请求)响应,如果SOAP消息形成错误,或者SOAP 1.1消息发送到SOAP 1.2端点(反之亦然),则会发生这种情况.

我只知道基本的PHP,所以我很难帮助他.我知道你可以创建一个客户端

$client = new SoapClient('https://foo.com/Service.svc?wsdl');
Run Code Online (Sandbox Code Playgroud)

但是如何指定绑定/端点?使用PHP实现这一切是否存在任何已知问题?

UPDATE

好的,所以我可以使用PHP连接到WCF服务ok(在SoapClient构造函数中指定SOAP版本),并且调用$client->__getFunctions()返回所有Web服务操作的正确列表.

当我尝试使用一个调用时$client->__soapCall,页面只是在那里加载了很长一段时间,并最终返回错误" Error Fetching http headers ".究竟是什么意思,我该如何解决?(从.Net客户端使用该服务非常有效.)

小智 5

今天就碰到了这个,为PHP调用者创建了一个带有多个绑定的WCF.设置位置似乎允许PHP的SoapClient的WSDL版本并指定要使用的绑定.

WCF配置是(1个服务,带有2个绑定wsHttp和basicHttp),非常简单.

PHP代码:

$client = new SoapClient("http://example.com/service.svc?wsdl");
$client->__setLocation("http://example.com/service.svc/basic");
$response = $client->MethodName(array( "paramName" => "paramValue" ... ));
Run Code Online (Sandbox Code Playgroud)