web-dev-qa-db-ja.com

GetResponse()での500内部サーバーエラー

次のように、ユーザーのリクエストごとにWebサービスを呼び出すトラフィックの多いaspxページがあります。

string uri = "Path.asmx";
string soap = "soap xml string";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Headers.Add("SOAPAction", "\"http://xxxxxx"");
request.ContentType = "text/xml;charset=\"utf-8\"";
request.Accept = "text/xml";
request.Method = "POST";

using (Stream stm = request.GetRequestStream())
{
    using (StreamWriter stmw = new StreamWriter(stm))
    {
        stmw.Write(soap);
    }
}
WebResponse response = request.GetResponse();
response.close();

すべてが正常に動作していますが、次のエラーが発生することがあります。

リモートサーバーがエラーを返しました:(500)Internal Server Error。 System.Net.HttpWebRequest.GetResponse()で

誰かがこのエラーについて何か考えているか、私が間違っているかどうかを誰かに教えてもらえますか?.

24
Krishna

最後に、次のコードで内部サーバーエラーメッセージを取り除きます。それを達成する別の方法があるかどうかはわかりません。


string uri = "Path.asmx";
string soap = "soap xml string";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Headers.Add("SOAPAction", "\"http://xxxxxx"");
request.ContentType = "text/xml;charset=\"utf-8\"";
request.Accept = "text/xml";
request.Method = "POST";

using (Stream stm = request.GetRequestStream())
{
    using (StreamWriter stmw = new StreamWriter(stm))
    {
        stmw.Write(soap);
    }
}

using (WebResponse webResponse = request.GetResponse())
{
}
4
Krishna

私にとってこのエラーが発生したのは、まったく同じシグネチャを持つ2つのWeb APIアクションがあり、両方とも同じ動詞HttpPostを持っていたからです。エラーが削除されました。私のcatchステートメントの以下は、問題の根本を突き止めるのに役立ちました。

catch (WebException webex)
{
                WebResponse errResp = webex.Response;
                using (Stream respStream = errResp.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(respStream);
                    string text = reader.ReadToEnd();
                }
}
45

そのエラーから、少なくともWebサービスを呼び出す部分はコードに問題がないと思います。エラーは実際のWebサービスにあるようです。

Webサーバーからエラーを取得するには、try catchを追加してWebExceptionをキャッチします。 WebExceptionには、HttpResponseであるResponseというプロパティがあります。その後、返されたものをすべて記録し、コードをアップロードできます。ログを後で確認し、実際に返されているものを確認してください。

21
FallenAvatar

リクエストにUserAgentを指定しようとしましたか?例えば:

request.UserAgent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
5
Roman Gudkov

私にとって、エラーは誤解を招くものでした。 SoapUIで誤ったWebサービスをテストすることで、真のエラーを発見しました。

0
Graham Laight

私の場合、リクエストオブジェクトはベースオブジェクトから継承しました。知らずにintでプロパティを追加しましたか?私のリクエストオブジェクトとベースオブジェクトには、intデータ型の同じプロパティ(同じ名前)もあります。私はこれに気づき、リクエストオブジェクトに追加したプロパティを削除し、その後は正常に機能しました。

0
Ziggler

私の場合、SoapActionオブジェクトからHttpWebRequest命令を削除するだけです。したがって、HttpWebRequestの定義で.Headers.Add("SOAPAction","someurl")を定義しておらず、コードは正常に機能します。

ResultXMLXDocumentです。 ResultStringは文字列です。

try
{
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Url);
    //req.Headers.Add("SOAPAction", "http://tempuri.org/IWebService/GetMessage");
    req.ProtocolVersion = HttpVersion.Version11;
    req.ContentType = "text/xml;charset=\"utf-8\"";
    req.Accept = "text/xml";
    req.KeepAlive = true;
    req.Method = "POST";        

    using (Stream stm = req.GetRequestStream())
    {
        using (StreamWriter stmw = new StreamWriter(stm))
            stmw.Write(soapStr);
    }
    using (StreamReader responseReader = new StreamReader(req.GetResponse().GetResponseStream()))
    {
        string result = responseReader.ReadToEnd();
        ResultXML = XDocument.Parse(result);
        ResultString = result;      
    }
}

最初にエラーメッセージを見て、アプリケーション全体を再コンパイルすることをお勧めします。再コンパイルするときに、必要なすべてのdllがbinフォルダーにあることを確認してください。

0
Santhosh Legent