这里是wsdl soap字段
<element name="transactionCle" nillable="true" type="xsd:int"/>
当我在PHP中调用WS并显示带有__getLastResponse()
的soap时
我得到交易Cle:
<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>
我向使用php的Apache服务器提供的wsdl添加了一个新的WebReference
生成的代理类给我的字段:
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的值为null
如果我手动将代理类从System.Nullable修改为int现在C#给我一个好值(12708584)。
但当我更新Webreference时,我必须再次修改代理类
这是我的问题:如何:
或者在不修改代理类的情况下将transactionCle设置为int类型
还是让连载给我好的价值?
编辑:我无法修改WS-php或wsdl
将以下属性添加到wsdl 中的transactionCle元素
minOccurs="1" maxOccurs="1"
然后重新生成代理。如果它有帮助,那么你可以做三件事:
- 手动更改生成的代理(您已经提到不会更改)
- 要求WS所有者扩展生成的wsdl。这将确保Web服务的.net兼容性
- 通过重写SchemaImporterExtension的方法创建您自己的代理生成器。看看这里:http://msdn.microsoft.com/en-us/library/system.xml.serialization.advanced.schemaimporterextension.aspx。它还有一个可下载示例的链接