使用SOAP将参数传递给.NET Web服务

时间:2012-09-19 16:48:57

标签: php .net soap-client

我正在开发一个项目,我需要将参数传递给.NET Web服务。下面是.NET SOAP请求结构的样子。

<soap:Body>
<ListRequest xmlns="My.API.1.0">
      <ID>guid</ID>
      <Parameters>
        <Values xmlns="api.test">
          <fv ID="string">
            <Value />
            <ValueTranslation>string</ValueTranslation>
          </fv>
          <fv ID="string">
            <Value />
            <ValueTranslation>string</ValueTranslation>
          </fv>
        </Values>
      </Parameters>      
</ListRequest>
</soap:Body>

以下是PHP代码的一部分。

$params=array('ID'=> $listID,
              'Parameters' => 
                array(
                   array('ID' => 'ROOM', 'ValueTranslation' => '99999')));                    

        $result=$soapClient->ListRequest($params);

每当我在没有参数的情况下进行调用时,请求都会起作用并将结果返回到php页面。但是当我介绍参数时,我得到“函数GETLIST期望参数'ROOM',这是没有提供的”错误。我感觉问题是我映射参数结构的方式,但我无法弄清楚如何将上面的SOAP xml映射到php代码。

谢谢大家的帮助!

1 个答案:

答案 0 :(得分:3)

我认为您不能使用assoc数组为soap请求指定参数。尝试使用对象,它在过去对我有用

$params = new stdClass();
$params->ID = $listId;

$params->Parameters = new stdClass();

$params->Parameters->Values = new stdClass();
$params->Parameters->Values->fv = array();

//Child of "Parameters"
$p = new stdClass();
$p->ID = 'ROOM';
$p->ValueTranslation = '99999';

$params->Parameters->Values->fv[] = $p;

$soap->ListRequest($params);

另一个解决方案是使用XML DOM并自己处理XML数据的创建(然后只需将其作为字符串传递给要在SOAP中调用的函数)

此外,您使用assoc数组创建的数据结构与它应该的结构不匹配..(仔细查看您发布的XML,您将看到您缺少的内容)

编辑:我想我现在应该反映你的架构。