テスト フォーム (POST) を介して呼び出すときに正常に動作する単純な .NET サービス (asmx) を使用しています。HttpWebRequest オブジェクトを介して呼び出すと、「System.Net.WebException: リモート サーバーがエラーを返しました: (500) 内部サーバー エラー」という WebException が発生します。より深く掘り下げて、WebException.Response.GetResponseStream() を読んで、「Missing parameter: serviceType.」というメッセージが表示されます。しかし、私はこのパラメータを明確に含めました。
ここで途方に暮れています。さらに悪いことに、サービス自体をデバッグするためのアクセス権がありません。
リクエストを行うために使用されるコードは次のとおりです。
string postData = String.Format("serviceType={0}&SaleID={1}&Zip={2}", request.service, request.saleId, request.postalCode);
byte[] data = (new ASCIIEncoding()).GetBytes(postData);
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.Timeout = 60000;
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.ContentLength = data.Length;
using (Stream newStream = httpWebRequest.GetRequestStream())
{
newStream.Write(data, 0, data.Length);
}
try
{
using (response = (HttpWebResponse)httpWebRequest.GetResponse())
{
if (response.StatusCode != HttpStatusCode.OK)
throw new Exception("There was an error with the shipping freight service.");
string responseData;
using (StreamReader responseStream = new StreamReader(httpWebRequest.GetResponse().GetResponseStream(), System.Text.Encoding.GetEncoding("iso-8859-1")))
{
responseData = responseStream.ReadToEnd();
responseStream.Close();
}
if (string.IsNullOrEmpty(responseData))
throw new Exception("There was an error with the shipping freight service. Request went through but response is empty.");
XmlDocument providerResponse = new XmlDocument();
providerResponse.LoadXml(responseData);
return providerResponse;
}
}
catch (WebException webExp)
{
string exMessage = webExp.Message;
if (webExp.Response != null)
{
using (StreamReader responseReader = new StreamReader(webExp.Response.GetResponseStream()))
{
exMessage = responseReader.ReadToEnd();
}
}
throw new Exception(exMessage);
}
何が起こっているのか誰にも分かりますか?
ありがとう。
アップデート
デバッガーをステップ実行すると、パラメーターが正しいことがわかります。また、フィドラーでパラメーターが正しいこともわかります。
フィドラーを調べると、このコードが実行されるたびに 2 つのリクエストが返されます。最初のリクエストは、パラメーターを送信する投稿です。「Document Moved Object Moved This document may be found here」というメッセージとともに 301 応答コードを受け取ります。2 番目の要求は、本文のない同じ URL への GET です。「パラメーターがありません: serviceType」という 500 サーバー エラーが発生します。メッセージ。