2012-03-22 42 views
2

这里web服务PHP是WSDL肥皂场消费用C#

<element name="transactionCle" nillable="true" type="xsd:int"/> 

当我打电话PHP中的WS和我展示与__getLastResponse()

我得到的肥皂,对于transactionCle:

<transactionCle href="#id50"/> 

这里是场的参考:

<multiRef xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" id="id50" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="soapenc:int">12708584</multiRef> 

我添加了一个新的WebReference到一个由Apache服务器使用PHP提供的wsdl。
代理类生成的给我的领域:

private System.Nullable<int> transactionCleField; 

/// <remarks/> 
     [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)] 
     public System.Nullable<int> transactionCle { 
      get { 
       return this.transactionCleField; 
      } 
      set { 
       this.transactionCleField = value; 
      } 
     } 

现在我的问题:

当我消耗在PHP中WS transactionCle的值是12708584
当我消耗在C#中的WS transactionCle的值为空

如果我将System.Nullable的代理类修改为int 现在C#给了我好价值(12708584)。

但是当我更新Web引用时,我不得不再次修改代理类。

这里是我的问题: 如何我:
或设置transactionCle无需修改代理类int类型?
或使序列化给我良好的价值?

编辑:我不能够修改WS PHP或WSDL

回答

1

添加以下属性到transactionCle元素在WSDL

minOccurs="1" maxOccurs="1" 

然后重新生成代理。如果有帮助,那么你可以做三件事情:

  1. 手工修改生成的代理(你已经提到你不会)
  2. 问WS-所有者扩展生成WSDL。这将确保Web服务的.net兼容性通过重写SchemaImporterExtension的方法来创建您自己的代理生成器。看看这里:http://msdn.microsoft.com/en-us/library/system.xml.serialization.advanced.schemaimporterextension.aspx。它还有一个可下载示例的链接。
+0

对不起我编辑我的问题,我不能修改WS我的修改必须是C#侧 – 2012-03-28 07:06:55

+0

可以编辑你的答案补充这句话 – 2012-03-29 12:07:36

+0

如果你有机会与minOccurs和maxOccurs的测试修改的WSDL我不知道。 – Martin 2012-03-29 18:26:29