GetResponse()上500内部服务器错误

Kri*_*hna 24 .net c# asp.net web-services web-applications

我有一个繁重的流量aspx页面根据每个用户的请求调用Web服务,如下所示.

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();
Run Code Online (Sandbox Code Playgroud)

一切都很好,但有时我得到以下错误.

远程服务器返回错误:(500)内部服务器错误.在System.Net.HttpWebRequest.GetResponse()

有没有人对这个错误有任何想法,或者有人告诉我,如果我做错了.

Moh*_*and 47

对我来说,这个错误发生是因为我有2个Web API动作具有完全相同的签名,并且都有相同的动词,HttpPost我所做的是将其中一个动词(用于更新的动词)更改为PUT并且删除了错误.我的catch语句中的以下内容有助于找到问题的根源:

catch (WebException webex)
{
                WebResponse errResp = webex.Response;
                using (Stream respStream = errResp.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(respStream);
                    string text = reader.ReadToEnd();
                }
}
Run Code Online (Sandbox Code Playgroud)

  • 这没有得到很好的记录,我需要很长时间才能找到它。谢谢你的例子! (2认同)
  • 发现这非常有帮助。如果您打算保留它或需要读取 teamcity 或 CI 框的输出,请考虑更改为以下内容。catch (WebException webException) { WebResponse webResponse = webException.Response; using (Stream responseStream = webResponse.GetResponseStream()) { if (responseStream == null) { throw; } StreamReader 阅读器 = new StreamReader(responseStream); 字符串文本 = reader.ReadToEnd(); 抛出新的WebException(文本,webException);} } (2认同)

Fal*_*tar 21

从那个错误,我会说你的代码很好,至少是调用webservice的部分.该错误似乎在实际的Web服务中.

要从Web服务器获取错误,请添加try catch并捕获WebException.WebException有一个名为Response的属性,它是一个HttpResponse.然后,您可以记录返回的任何内容,并上传代码.稍后在日志中查看并查看实际返回的内容.


Kri*_*hna 5

最后,我使用以下代码摆脱了内部服务器错误消息。不确定是否有另一种方法来实现它。


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())
{
}

Run Code Online (Sandbox Code Playgroud)


Rom*_*kov 5

您是否尝试为您的请求指定UserAgent?例如:

request.UserAgent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
Run Code Online (Sandbox Code Playgroud)