连接使用NetTCP绑定和BasicHttpBinding的WCF服务的PHP方法

3

我有一个WCF服务。它有多个客户端和三个终结点。这些终结点的绑定是nettcp、wsHttp和basicHttp。如果我尝试使用php内置的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。


喜欢错误出现在第666行。这是什么意思? :-) - Walden Leverich
Walden,我“消毒”了错误消息,以保护有罪的文件名和行号。确定我对.NET、PHP或特定任务有什么意识或潜意识的感觉是读者的练习。 - Justin Dearing
3个回答

1
当你说你不想部署两个服务主机时,我假设你是在一个Windows服务中自托管单个ServiceHost。我通过构建一个通用的服务主机解决了这个问题,可以在内部托管任意数量的服务实现(例如,在配置中的每个服务条目上new一个ServiceHost)。这样,我可以在单个Windows服务中灵活地托管尽可能多的服务实现。通过允许您将basicHttp绑定的服务与其他服务分离以保持WSDL干净,可以解决您的问题。有一些开源示例浮动(这里是一个链接:here)。
我所能想到的唯一另一种方法是公开自己构建的基于WSDL导出器的自定义元数据端点(请参见here)。
祝你好运!

我已经构建了一个自定义的WSDL导出器。目前它有点hackish,但基本上是有效的。 - Justin Dearing

0

我已向PHP提交了一个功能请求。如果他们实现了这个,我会将其标记为正确答案。但我仍然愿意接受更好的解决方案。

更新:我提交了一个补丁来实现这个功能。我正在等待批准。
更新:补丁已提交到svn。等待PHP的下一个版本发布。
更新:补丁现已成为PHP 5.3.3和5.2.14的一部分。


0

我目前正在研究的另一个选项是一个名为WSF-PHP的PHP第三方SOAP客户端。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接