我有一个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支持哪些内容可以干净地映射到它上面?
答案 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>
很适合该地图。