2009-03-05 20 views
0

次のリクエストを.Net 3.5 ASMX Webサービスに送信しています。デバッグ、ウェブサービスでASMX WebServicesの問題

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


、我々は、Webメソッド(ログインおよびメソッド)が利用できるparametr値がnullであることがわかります。 しかし、パスワードとユーザー名からxsi:type = "xsd:string"属性を削除すると、すべてが機能します。
名前空間xsdはhttp://www.w3.org/2001/XMLSchemaを指します。これは有効です。
なぜ.Netは応答を逆シリアル化できませんか?なぜ例外をスローしないのですか? BTW:サービス定義の別名http://www.w3.org/2001/XMLSchemaを「s」としています。それが問題なのでしょうか?

敬具、

+0

は、Stack Overflowの可読性のために追加された
タグですか、それとも封筒の一部ですか? – RuudKok

+0

可読性のために追加されました: –

答えて

1

.NETシリアライザは、ものをデシリアライズするために、基礎となるスキーマに依存しています。 xsi:type属性を指定すると、基本的にスキーマコントラクトが解除されます。

BTW。 http://tempuri.org/を使用しないでください。独自のURIを作成してください。

+0

Thx。しかし、なぜそれは壊れますか?私たちはhttp://www.w3.org/2001/XMLSchemaを指すxsdを指定しました。これは有効であるはずです。 –

+0

http://www.w3.org/2001/XMLSchemaは、シリアライザが理解するはずのあなたのスキーマではありません。あなたのスキーマはデフォルトのxmlnsの下になければなりません。ここではhttp://tempuri.org/です。 – DreamSonic

1

ASMXサービスは[SoapRpcService]属性で飾られていますか?そうでない場合、それはドキュメント/リテラル​​サービスであり、その形式でXMLを望んでいません。

このXMLはどのように送信されましたか?それは手で造られましたか? 「service.asmx?WSDL」から派生したWSDLに基づいて作成されたJavaクライアントによって送信されましたか?

+0

はい、それはk-soapによって送信されました。 Apprentlyでは、間違ったk-soapビルドを使用していて、最新のビルドを使用するようにコードを更新しました。これは問題を解決しました。 –

関連する問題