【问题标题】:Connecting to a WCF Service in PHP that has a a NetTCP Binding and a BasicHttpBinding在 PHP 中连接到具有 NetTCP 绑定和 BasicHttpBinding 的 WCF 服务
【发布时间】:2009-12-19 15:36:34
【问题描述】:

我有 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 的绑定吗?我可以在不同的绑定上生成不同的 wsdls。我不想部署两个服务主机。

【问题讨论】:

  • 喜欢错误出现在第 666 行。这说明了什么? :-)
  • Walden,我“清理”了错误消息以保护有罪的文件名和行号。确定我对 .NET、PHP 或手头特定任务的有意识或潜意识感受是读者的练习。

标签: .net php wcf nettcpbinding


【解决方案1】:

当您说不想部署两个服务主机时,我假设您在 Windows 服务中自托管单个 ServiceHost。我通过构建一个通用服务主机解决了这个问题,该主机可以在内部托管尽可能多的服务实现(例如,它是配置中每个服务条目的新服务主机)。这样,我可以根据需要在单个 Windows 服务中灵活地托管尽可能多的服务实现。这将通过允许您将 basicHttp 绑定服务与其他服务分开以保持 WSDL 清洁来解决您的问题。有一些这样的开源示例(here's one)。

我能想到的唯一其他方法是公开您自己的从 WsdlExporter 构建的自定义元数据端点(请参阅 here

祝你好运!

【讨论】:

  • 我已经构建了一个自定义 wsdl 导出器。目前它有点骇人听闻,但它基本上可以工作。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    I filed a feature request with PHP。如果他们执行此操作,我会将其标记为正确答案。不过,我仍然愿意接受更好的解决方法。

    更新:我提交了一个补丁来实现这一点。我正在等待它的批准。
    更新:补丁已提交到 svn。等待 PHP 的下一个版本。
    更新:补丁现在是 PHP 5.3.3 和 5.2.14 的一部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 2011-01-31
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多