3 Stimmen

Komplexer Datentyp apachesoap:Map in Webservice mit .net verbrauchen

Ich habe einen Webservice in Coldfusion programmiert, die ich versuche, mit c#.net zu konsumieren.

Der jeweilige Webservice gibt eine Coldfusion-Struktur zurück (eine Sammlung von Elementen mit einem Schlüssel und einem Wert), die vom Webservice als komplexes Objekt vom Typ apachesoap:Map dargestellt wird

<wsdl:message name="getDetailResponse">
    <wsdl:part name="getDetailReturn" type="apachesoap:Map"/>
</wsdl:message>

Der komplexe Typ ist in der von coldfusion automatisch generierten WSDL-Datei korrekt deklariert

<schema targetNamespace="http://xml.apache.org/xml-soap">
    <import namespace="http://webservice.templates"/>
    <import namespace="http://rpc.xml.coldfusion"/>
    <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
    <complexType name="mapItem">
        <sequence>
            <element name="key" nillable="true" type="xsd:anyType"/>
            <element name="value" nillable="true" type="xsd:anyType"/>
        </sequence>
    </complexType>

    <complexType name="Map">

        <sequence>
            <element maxOccurs="unbounded" minOccurs="0" name="item" type="apachesoap:mapItem"/>
        </sequence>
    </complexType>
</schema>

Beim Versuch, dies mit dem folgenden c#-Code zu konsumieren:

theWebservice.theWebservice myWS = new theWebservice.theWebservice();
theWebservice.Map myMap = myWS.searchForRecord("some record data");

if (myMap.item == null) {
    Response.Write("myMap.item is null");
}

Der Code lässt sich gut kompilieren, zeigt aber die Meldung "myMap.item is null" an, anstatt ein Objekt mit einem Schlüssel- und Wertepaar zu sein.

Die Überprüfung mit dem Debugger zeigt, dass myMap zwei Kinder hat, item und itemField, beide vom Typ theWebservice.mapItem[] und beide mit dem Wert null.

Ich habe andere Forum Beiträge mit einem ähnlichen Problem, aber keine Antworten gesehen, weiß jemand, wie ich den Dienst richtig verbrauchen kann, ohne den Webservice zu ändern, nur einfache Typen zu verwenden?

Bearbeitet, um mehr Informationen bereitzustellen

Wie pro John Saunders' Fragen, ich bin mit .NET Framework 3.5 in Visual Web Developer 2008. der Webservice wurde als Web-Referenz enthalten und die Antwort SOAP-Code ist unten (von soapUI) bereitgestellt:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <ns1:getDetailResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://DefaultNamespace">
            <getDetailReturn xsi:type="ns2:Map" xmlns:ns2="http://xml.apache.org/xml-soap">
                <item xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
                    <key xsi:type="soapenc:string">a</key>
                    <value xsi:type="soapenc:string">1</value>
                </item>
                <item>
                    <key xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">b</key>
                    <value xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">2</value>
                </item>
            </getDetailReturn>
        </ns1:getDetailResponse>
    </soapenv:Body>
</soapenv:Envelope>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X