从ASP.NET C#app中使用PHP Web服务(SOAP,WSDL) - 数组问题

时间:2009-07-09 05:44:31

标签: php asp.net web-services soap wsdl

我有一个Web服务,定义(WSDL)并在PHP中实现。这个是相对简单的,重要的位定义如下:

<message name='registerAccountRequest'>
        <part name='key' type='xsd:string'/> <!-- key -->
        <part name='data' type='xsd:array'/> <!-- account data -->
</message>
<message name='registerAccountResponse'>
        <part name='success' type='xsd:string' />
</message>

请注意,data参数是一个数组,实际上它是一个关联数组。 PHP客户端可以很好地工作,调用服务并获得适当的响应。

现在,当我尝试使用ASP.NET使用此服务时...我将如何用作关联数组? Hashtable?由Visual Studio创建的代理类表示第二个参数实际上是一个字符串(或应该是字符串)而不是任何类型的集合......

非常令人费解......

附录: 我尝试抓取PHP生成的SOAP请求,这里有一个带有'data'参数的部分:

...<data xsi:type="ns2:Map">
     <item>
       <key xsi:type="xsd:string">company_data</key>
       <value xsi:type="ns2:Map">
         <item>
           <key xsi:type="xsd:string">name</key>
           <value xsi:type="xsd:string">Test company name</value>
         </item>
         <item>
           <key xsi:type="xsd:string">slogan</key>
           <value xsi:type="xsd:string">Test company slogan</value>
         </item>

... 那么ns2:Map是什么数据类型? ASP.NET支持哪些内容可以干净地映射到它上面?

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。我用PHP创建了一个Web服务,并尝试使用ASP.NET。制作一个ASP.NET可以理解的关联数组变得非常困难。最后,我们决定放弃关联数组以支持对象。

    <definitions
       ...
       xmlns:myNameSpace="http://myServer.com/mySoapService/files/schema">



    <types>
      <schema xmlns="http://www.w3.org/2001/XMLSchema"
          xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
          targetNamespace="http://myServer.com/mySoapService/files/schema"
          xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">


      <complexType name="ViewCustomer_Object">
        <sequence>
            <element minOccurs="0" name="customer" type="string" />
            <element minOccurs="0" name="password" type="string" />
            <element minOccurs="0" name="first_name" type="string" />
        </sequence>
      </complexType>
    </schema>
  </types> 

   ...

    <message name="view_customer_response">
        <part name="return" type="myNameSpace:ViewCustomer_Object" />
    </message>



    ...

    </definitions>

对象的元素是公共属性。有些人甚至认为像这样的对象和散列表一样好。祝你好运。

答案 1 :(得分:1)

Hashtable将是PHP关联数组的最精确近似...然而,关联数组的“正常”使用的最佳比较将是Dictionary<string, object>或甚至{{1 (取决于你的数据实际是什么)。

Dictionary<string, string>很适合该地图。