0

以下は私の要求です。getresponse で 500 内部サーバー エラーが発生します。

string requestData = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Header><h:HeaderItem xmlns:h=\"http://tempuri.org/\">a header item</h:HeaderItem><ActivityId CorrelationId=\"090c553b-bfcc-4e4f-94cd-1b4333fe82a9\" xmlns=\"http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics\">377a454b-b543-4c6f-b4ac-3981029b60e6</ActivityId></s:Header><s:Body><string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">a body item</string></s:Body></s:Envelope>";
byte[] requestDataBytes = Encoding.UTF8.GetBytes(requestData);
 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/WebService/");
                request.Method = "POST";
                request.ContentType = "text/xml; charset=utf-8";
                request.Headers.Add("SOAPAction", "http://tempuri.org/IWebService/GetMessage");
                request.ContentLength = requestDataBytes.Length;

                StreamWriter streamWriter = new StreamWriter(request.GetRequestStream());
                streamWriter.Write(requestData);
                streamWriter.Flush();
                streamWriter.Close();
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                StreamReader streamReader = new StreamReader(response.GetResponseStream());
                string responseBody = streamReader.ReadToEnd();
4

2 に答える 2

1

答えがあるかもしれません。

次のように、コンテンツ タイプを設定する前にヘッダーを設定した行を移動し、コードを再試行します。

       request.Headers.Add("SOAPAction", "http://tempuri.org/IWebService/GetMessage");
       request.ContentType = "text/xml; charset=utf-8";

MS の WebRequest オブジェクトの ContentType プロパティのドキュメントに基づいて、この提案を行います。

WebRequest に関する MS ドキュメント

このプロパティの値は WebHeaderCollection に格納されます。WebHeaderCollection が設定されている場合、プロパティ値は失われます。

ここで、WebHeaderCollection を明示的に設定していないことに気付きましたがそのコレクションにヘッダーを設定しているため、少なくともこれが問題である可能性が疑われました。既存の ContentType を空白にレンダリングし、デフォルトとして解釈されます。 Web サービスのインバウンド側。

遠回りかもしれませんが、試してみる価値はあります。

于 2012-04-24T22:10:48.647 に答える
0

サーバーで WCF トレース ログを有効にして、エラーを示しているかどうかを確認する必要があります。通常、逆シリアル化中またはアプリ コードに到達する前に WCF レイヤーで発生したエラーは、このログに書き込まれます。

WCF トレース ログの設定の詳細については、こちらまたはこちらを参照してください。

于 2011-07-18T17:20:40.187 に答える