我有一个WCF服务。它有多个客户端和三个端点。端点绑定是nettcp,wsHttp和basicHttp。如果我尝试通过php'd builtin SoapClient类连接到它,就像这样:
$service = new SoapClient
("http://service.companyname.local:6666/Service/?wsdl",
array(
"location" => "http://service.companyname.local:6666/Service/Basic",
"trace" => true,
'soap_version' => SOAP_1_1
)
);
我得到以下内容:
PHP Fatal error: SOAP-ERROR: Parsing WSDL: PHP-SOAP doesn't support transport 'http://schemas.microsoft.com/soap/tcp' in c:\www\client.php on line 666
现在我的解决方法是手动保存wsdl并删除nettcp绑定。有没有一种解决方法可以让我使用自动生成的wsdl?我可以在web.config中隐藏wsdl的绑定吗?我可以在不同的绑定上生成不同的wsdl。我不想部署两个服务主机。
答案 0 :(得分:1)
当您说您不想部署两个服务主机时,我假设您在Windows服务中自我托管一个ServiceHost。我通过构建一个通用服务主机来解决这个问题,该主机可以在内部托管尽可能多的服务impl(例如,它是配置中每个服务条目的新ServiceHost)。这样,我可以根据需要在单个Windows服务中灵活地托管尽可能多的服务impl。这将通过允许您将basicHttp绑定服务与其他服务分开以保持WSDL清洁来解决您的问题。有一些开源示例浮动(here的)。
我能想到的另一种方法是公开自己的自定义元数据端点,从WsdlExporter构建(参见here)
祝你好运!答案 1 :(得分:0)
I filed a feature request with PHP。如果他们实现了这一点,我会将此标记为正确答案。我仍然愿意接受更好的解决方法。
更新:我提交了一个补丁来实现这一点。我正在等待它的批准
更新:修补程序已提交给svn。等待PHP的下一个版本。
更新:补丁现在是PHP 5.3.3和5.2.14的一部分。
答案 2 :(得分:0)
我目前正在研究的另一个选项是PHP的第三方soap客户端,名为WSF-PHP。