这里是wsdl soap字段
<element name="transactionCle" nillable="true" type="xsd:int"/>
当我在 PHP 中调用 WS 并使用 __getLastResponse()
显示 soap 时
我得到了 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>
我在使用 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# 给我 Good Value (12708584)。
但是当我更新 Webreference 时,我必须再次修改代理类。
这是我的问题:
我怎样才能:
或者在不修改代理类的情况下将transactionCle设置为int类型?
或者让序列化给我带来好的值(value)?
编辑:我无法修改 WS php 或 wsdl
最佳答案
在wsdl中的transactionCle元素中添加以下属性
minOccurs="1" maxOccurs="1"
然后重新生成代理。如果有帮助,那么您可以做三件事:
- 手动更改生成的代理(您已经提到您不会这样做)
- 要求 WS 所有者扩展生成的 wsdl。这将确保网络服务的 .net 兼容性
- 通过覆盖 SchemaImporterExtension 的方法创建您自己的代理生成器。在这里看看:http://msdn.microsoft.com/en-us/library/system.xml.serialization.advanced.schemaimporterextension.aspx .它还具有指向可下载示例的链接。
关于c# - 使用 C# 使用 web 服务 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9826843/