2009-04-09 5 views
2

Ich habe ein Problem mit der Verwendung eines Webdienstes von Drittanbietern in .NET C#. Es läuft auf Apache (NuSoap). Alles funktioniert normal bis zur Deserialisierung (wahrscheinlich ...). Wenn ich die Funktion SoapHttpClientProtocol.Invoke() aufrufen, erhalte ich immer ein Objekt-Array mit einem Null-Objekt. Schlecht ist, dass dieser Webdienst kein WSDL-Dokument bereitstellt. ?. :-(michPHP-Webdienst in C#: Invoke() - Funktion gibt null zurück

Kann jemand helfen, bitte ich denke, dass der Deserialisierung Prozess nicht

Hier Seife Antwort:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> 
    <SOAP-ENV:Body> 
    <ns1:EncodingTestResponse xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/"> 

     <item xmlns:ns4071="http://xml.apache.org/xml-soap" xsi:type="ns4071:Map"> 
     <item> 
      <key xsi:type="xsd:string">ascii</key> 
      <value xsi:type="xsd:string">ertzyuuioasdcnERSTZYUIOADCN</value> 
     </item> 
     <item> 
      <key xsi:type="xsd:string">latin2</key> 
      <value xsi:type="xsd:string">xy</value> 
     </item> 
     <item> 
      <key xsi:type="xsd:string">w1250</key> 
      <value xsi:type="xsd:string">pq</value> 
     </item> 
     </item> 

    </ns1:EncodingTestResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Aufruf der Methode:

[SoapTrace] 
[SoapDocumentMethod("EncodingTest",ParameterStyle=SoapParameterStyle.Wrapped)] 
public item EncodingTest() 
{ 
    var obj = this.Invoke("EncodingTest", new object[] {}); 
    return null; 
} 

und das Objekt, das ich versuchte zu deserialisieren:

[Serializable] 
[XmlType(Namespace = "http://xml.apache.org/xml-soap", TypeName="item")] 
public class item 
{ 
    [XmlArray("item", Form = XmlSchemaForm.Unqualified)] 
    public item[] items { get; set; } 

    [XmlElement(Form=XmlSchemaForm.Unqualified)] 
    public string key { get; set; } 

    [XmlElement(Form = XmlSchemaForm.Unqualified)] 
    public string value { get; set; } 
} 
+0

~ Ich frage mich, ob Sie mir helfen könnten, ich denke, ich habe ein ähnliches Problem. Ist der Code, den Sie im unteren Bereich hinterlassen haben, wirklich alles, was Sie getan haben, um dieses Problem zu lösen? – jcolebrand

Antwort

4

Ich löse das, aber es war nicht einfach. Wenigstens habe ich gelernt, xml deserialization zu steuern. :)

[SoapDocumentMethod(ResponseElementName = "EncodingTestResponse", ResponseNamespace = "http://schemas.xmlsoap.org/soap/envelope/")] 
[return: XmlArray("item", Namespace = "", IsNullable = false)] 
[SoapTrace] 
public item[] EncodingTest() 
{ 
    object[] result = this.Invoke("EncodingTest", new object[] { }); 
    return (item[])result[0]; 
} 


[SoapType(TypeName = "Map", Namespace = "http://xml.apache.org/xml-soap")] 
    public class item 
    { 
     [XmlElement(Form = XmlSchemaForm.Unqualified)] 
     public string key { get; set; } 

     [XmlElement(Form = XmlSchemaForm.Unqualified)] 
     public string value { get; set; } 

     public item[] items { get; set; } 
    }