【问题标题】:Getting a working .NET web service to be consumed by php via SOAP通过 SOAP 获取 php 使用的工作 .NET Web 服务
【发布时间】:2012-05-15 11:50:41
【问题描述】:

我有一个标准 SOAP 的 .net Web 服务,并且我已经添加了 POST/GET 功能。在 .net 中,我可以毫无问题地使用 Web 服务,并且在使用测试 POST 页面时,我也可以成功使用 Web 服务。我收到了 php 开发人员的请求,要求使用我认为完全没有问题的 Web 服务,但是他无法获得成功的结果。我从来没有使用过 PHP,所以我没有一个测试项目,我什至可以将它用于 php 方面。我相信这是他用过的第一个网络服务,所以他自己并没有太多经验。

所以我的问题是:

1) 作为一名 .net 开发人员,我什至不知道如何开始研究这个问题。我不知道这是我的网络服务有问题还是他的 php 代码有问题。因为 .net 和 POST 工作,我倾向于相信这是他的代码中的东西,但是我无法测试,因为我不知道 php。

2) 是否有一些标记或我需要做的事情才能让 php 正确使用我的服务?

3) 有什么工具可以用来检查与 php 的兼容性吗?

4) 有PHP知识的人可以看看他的代码,看看有没有明显的问题吗?

已解决: 请参阅答案中的工作代码。

【问题讨论】:

  • 使用echo $client->__getLastRequest(); 并显示它打印的内容。具体来说,检查请求中是否存在三个输入参数。
  • @MrCode 我尝试了这个,使用 PHP 脚本测试页面 (writecodeonline.com/php),结果如下:1db1c37d-b181-443e-8cfb-c4574c1245d955184d93-771a-44d1-ba7a-fd02fe1e15f5。显然那里只有 2 个向导。当然,这似乎是问题所在。你发现数组解密代码有什么问题吗?
  • __getLastRequest() 应该为您提供请求的整个 XML。您可能需要查看源代码才能在浏览器中看到它(因为它可能会隐藏 xml)。用完整的 XML 请求更新问题,这样我们就可以看到整个事情。
  • @MrCode 对不起,请参阅xml请求代码的原始问题。它显然缺少 1 个参数。它似乎正在删除第一个声明的参数 VendorID。有什么想法吗?
  • @MrCode 我搞定了!我开始研究soap xml并查找更多的php代码,我能够将工作代码拼凑在一起。

标签: php .net web-services


【解决方案1】:
$function = "soapcall"; 
$array =array("Param1" => "parameter1", "Param2" => "parameter2", "Param3" => "parameter3"); 

$client = new SOAPClient( 
'http://url.asmx?WSDL', 
array( 
    'location' => 'url.asmx?WSDL', 
    'trace' => 1, 
    'style' => SOAP_RPC, 
    'use' => SOAP_ENCODED, 
) 
);


$result = $client->__soapCall('soapcall', array("parameters"=>$array));

foreach( $result as $r) 
{   print $r."<br>";    }

【讨论】:

    【解决方案2】:

    与 WCF 和其他 Web 服务缺乏互操作性 - 这不仅仅是 PHP 的问题,Java 库也经常无法与 WCF Web 服务一起使用。在许多其他 SO 问题中有更多信息 - 请参阅侧边栏。

    您可以尝试的一件事是SOAPUI(或from sourceforge)以“交互方式”调用您的网络服务,这应该有助于他了解网络服务。

    【讨论】:

    • 感谢您提供 SOAPUI 链接,看起来这将非常方便地帮助诊断此问题。
    • 我已经下载并安装了 SOAPUI,并且我的 Web 服务已通过 WS-I 合规性。我还进行了许多测试/请求,一切似乎都按预期工作。在这一点上,我必须假设这是 PHP 不能很好地与 SOAP 配合使用的问题。
    【解决方案3】:

    我们在 Php 中使用NuSoap 进行 web 服务调用,效果很好。

    【讨论】:

    • 感谢您的建议。我会传给你的。
    【解决方案4】:

    .NET 服务需要有 http 端点(适配器)。 https://bugs.php.net/bug.php?id=50698

    有时您还需要拥有 NTLM 授权Call webservice with NTLM authorization

    【讨论】:

      猜你喜欢
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多