从ASP.NET C#应用程序中调用PHP webservice(SOAP,WSDL)- 数组问题

4

我有一个Web服务,它是用PHP定义(WSDL)和实现的。这个比较简单,重要的部分定义如下:

<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>

请注意,数据参数是一个数组,实际上是一个关联数组。 PHP客户端可与此工作得很好,调用服务并获得正确的响应。
现在,当我尝试使用ASP.NET消耗此服务时...我应该使用什么作为关联数组?哈希表?..由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个回答

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>

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


是的!我不得不做完全相同的事情:))事实上,几天前刚刚完成了它,似乎是唯一可行的解决方案。我认为背后的原因是W3C XML Schema标准不包含关联数组作为数据类型。 - Alex N.

1

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

Hashtable 可以很好地适应这个映射。


1
那就是...它不适用于Hashtable :( 当我使用Hashtable参数从ASP.NET调用webservice时,它甚至无法编译,给了我两个错误:错误84:'my.registration.RemoteRegistrationService.registerAccount(string, string)'的最佳重载方法存在一些无效的参数和错误85:参数'2':无法将类型为'System.Collections.Hashtable'的参数转换为'string'。 ;( - Alex N.
我承认以前没有使用过SOAP...如果那是一个自动生成的方法,那么我真的不知道你能做什么...我只是根据我所知道的来说话,那就是Hashtable是最好的PHP关联数组近似值,从我所看到的,也是ns2:Map类型的最佳近似值。 - Matthew Scharley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接