【问题标题】:Pass parameters to a .NET webservice using SOAP使用 SOAP 将参数传递给 .NET Web 服务
【发布时间】:2012-09-19 16:48:56
【问题描述】:

我正在处理一个需要将参数传递给 .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 代码。

感谢大家的帮助!

【问题讨论】:

    标签: php .net soap-client


    【解决方案1】:

    我认为您不能使用 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,您会发现缺少什么)

    编辑:认为我现在做了一些应该反映您的架构的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多