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