2009-03-05 4 views
0

Wir senden die folgende Anfrage an einen .Net 3.5 ASMX-Webdienst.ASMX WebServices-Problem

<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
     <Login xmlns="http://tempuri.org/" id="o0" SOAP-ENC:root="1"> 
      <password xsi:type="xsd:string">1234</password> 
      <userName xsi:type="xsd:string">Developer</userName> 
     </Login> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope>  


auf Debuggen, die Web-Service, so finden wir, dass die parametr Werte zur Verfügung, die Web-Methode (Login und Verfahren) null sind. Wenn wir jedoch das Attribut xsi: type = "xsd: string" aus dem Passwort und Benutzernamen entfernen, funktioniert alles.
Der Namespace xsd zeigt auf http://www.w3.org/2001/XMLSchema, was gültig ist.
Warum kann .Net die Antwort nicht deserialisieren? und warum wirft es keine Ausnahme? BTW: Unsere Service-Definition-Aliase http://www.w3.org/2001/XMLSchema als "s". Könnte das ein Problem sein?

Mit freundlichen Grüßen,

+0

sind die
Tags für die Lesbarkeit auf Stack Overflow hinzugefügt oder sind sie Teil Ihres Umschlags? – RuudKok

+0

Zur besseren Lesbarkeit hinzugefügt :) –

Antwort

1

.NET Serializer stützen sich auf die zugrunde liegende Schema Sachen deserialisieren. Wenn Sie das Attribut xsi: type angeben, brechen Sie im Grunde den Schemavertrag.

BTW. Verwenden Sie nicht http://tempuri.org/, erstellen Sie Ihren eigenen URI.

+0

Thx. Aber warum bricht es? Wir haben xsd angegeben, das auf http://www.w3.org/2001/XMLSchema verweist. Das sollte also gelten. –

+0

http://www.w3.org/2001/XMLSchema ist nicht DEIN Schema, das der Serializer verstehen soll. Dein Schema sollte unter Standard xmlns gehen, wo http://tempuri.org/ jetzt ist. – DreamSonic

1

Ist Ihr ASMX-Service mit dem [SoapRpcService] -Attribut ausgestattet? Wenn nicht, handelt es sich um einen Dokument-/Literaldienst, und die XML-Datei soll nicht in diesem Format vorliegen.

Wie wurde dieses XML gesendet? Wurde es von Hand gebaut? Wurde es von einem Java-Client gesendet, der basierend auf der von "service.asmx? WSDL" abgeleiteten WSDL erstellt wurde?

+0

Ja, es wurde von k-soap gesendet. Apprently haben wir den falschen k-soap-Build verwendet und unseren Code aktualisiert, um den neuesten Build zu verwenden. Dies hat das Problem gelöst. –