繁体   English   中英

使用C#消耗Web服务php

[英]Consuming a webservice php with C#

这是wsdl肥皂场

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

我向与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-element

minOccurs="1" maxOccurs="1" 

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

  1. 手动更改生成的代理(您已经提到过,不会)
  2. 要求WS所有者扩展生成的wsdl。 这将确保Web服务的.net兼容性
  3. 通过覆盖SchemaImporterExtension的方法来创建自己的代理生成器。 在这里看看: http : //msdn.microsoft.com/zh-cn/library/system.xml.serialization.advanced.schemaimporterextension.aspx 它还具有指向可下载示例的链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM