0

XMLをWCFサービスに投稿するのに助けが必要です。本質的に、私が経験している問題は、「400:Bad request」のHTTP応答です。それは説明的ですが、答えを見つけるのに苦労しています。

まず、私がWCFに組み込んだサービスは、元々IBMWebSphereWebサービスからの既存のWSDLに基づいています。いくつかの操作(MIME添付ファイルの削除、いくつかのリモートスキーマのダウンロード)の後、私はsvcutilに、すべての目的と目的で有効と思われるサービスインターフェイスを生成させることができました。

WCFサービスにインターフェイスを実装しました。WCFテストクライアントを実行すると、サービスに接続して要求を送信し、問題なく応答を受け取ることができます。ここまでは順調ですね!

HttpWebRequestクラスを介してXMLをWebサービスに投稿するためのテストアプリケーションに移動すると、WCFテストクライアントによって提供されたXMLを使用しているにもかかわらず、「400:Badrequest」応答の受信を開始します。

私はWCFトレースを使用して、受信したメッセージをダンプしましたが、1つの顕著な違いがあります。すべてのWCFテストクライアントメッセージが正しく入力され、ヘッダー情報などが表示されます。SOAPテストユーティリティからのすべてのメッセージは次のように表示されます。 「奇形」。メッセージタブを見ると、私が送信している手動のPOSTメッセージでは、本文が要素でラップされています。

<MessageLogTraceRecord><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:57567/Service1.svc</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.nowhere.co.uk/RequestService/RequestOperation</Action>
</s:Header>
</s:Envelope>
]]></MessageLogTraceRecord>

WCFメッセージは次のように表示されます。

<MessageLogTraceRecord>
<HttpRequest xmlns="http://schemas.microsoft.com/2004/06/ServiceModel/Management/MessageTrace">
<Method>POST</Method>
<QueryString></QueryString>
<WebHeaders>
<Connection>Keep-Alive</Connection>
<Content-Length>185</Content-Length>
<Content-Type>text/xml; charset=utf-8</Content-Type>
<Accept-Encoding>gzip, deflate</Accept-Encoding>
<Expect>100-continue</Expect>
<Host>localhost:57567</Host>
<VsDebuggerCausalityData>uIDPo4VLDcJD5AZDjB5sdmoeakEAAAAAH/hWABuWQ0iiq47QDHh0GlelCLcEx7FLibxRvpq1tTgACQAA</VsDebuggerCausalityData>
<SOAPAction>"http://www.nowhere.co.uk/RequestService/RequestOperation"</SOAPAction>
</WebHeaders>
</HttpRequest>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:57567/Service1.svc</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.nowhere.co.uk/RequestService/RequestOperation</Action>
</s:Header>
</s:Envelope>
</MessageLogTraceRecord>

Fiddlerでトレースを試みましたが、役に立ちませんでした-app.configファイルを変更したにもかかわらず、WCFテストクライアントが作成したプロキシを介してリクエストを送信するようにできません。私はSOAPリクエストをトレースしましたが、次のことがわかります。

Content-Type: text/xml; charset="utf-8"
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:57567
SOAPAction: "http://www.nowhere.co.uk/RequestService/RequestOperation"
Content-Length: 459
Expect: 100-continue
Connection: Keep-Alive

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:57567/Service1.svc</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.nowhere.co.uk/RequestService/RequestOperation</Action>
</s:Header>
</s:Envelope>

私が知る限り、私が送信しているメッセージは問題ないはずです-ヘッダーとメッセージの内容の外では、他に何を送信できるかわかりません。

最後に言わなければならないのは、私は決してWCFの専門家ではなく、商業的な機密性のために特定のSOAPAction値を変更する必要があったということです。

誰かがこのかなり苛立たしい問題について何か助けを提供できますか?

前もって感謝します

4

1 に答える 1

0

Fiddlerのコメントに感謝します-WCFリクエストをトレースすることができ、リクエストからxmlを使用することは機能しているようです!それ以来、WCFクライアントに対するWebSphereサービスに対して機能する完全なメッセージを試しましたが、それも機能します。

問題はActionヘッダーだったと思います。WCFはWSAのいくつかのリビジョンのみをサポートしていると思いますが、この特定のWSDLが使用していたものはどれもありません。失敗していた(WCFテストクライアントフロントエンドからプルされた)元の要求を見ると、使用していたアドレス指定の名前空間は次のように宣言されていました。

xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none"

一方、サービスに渡される実際のWCF要求は、次のように宣言されます。

xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing"

実際の要素自体には同じ値が入力されていますが、名前空間の違いだけです。

<wsa:Action>http://www.nowhere.co.uk/RequestService/RequestOperation</wsa:Action>

したがって、正しいアドレス指定バージョンを使用し、新しいWCF互換バージョンを省略すると、問題が修正されたように見えます。

于 2011-06-03T11:53:11.977 に答える