2

ここに wsdl の SOAP フィールドがあります

<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 を変更できません

4

1 に答える 1

1

次の属性を wsdl の transactionCle 要素に追加します。

minOccurs="1" maxOccurs="1" 

次に、プロキシを再生成します。それが役立つ場合は、次の 3 つのことを行うことができます。

  1. 生成されたプロキシを手動で変更します(すでに言及していません)
  2. 生成された wsdl を拡張するように WS 所有者に依頼してください。これにより、Web サービスの .net 互換性が確保されます。
  3. SchemaImporterExtension のメソッドをオーバーライドして、独自のプロキシ ジェネレータを作成します。ここを見てください: http://msdn.microsoft.com/en-us/library/system.xml.serialization.advanced.schemaimporterextension.aspx。ダウンロード可能なサンプルへのリンクもあります。
于 2012-03-27T22:15:02.347 に答える