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

时间:2010-11-04 16:36:16

标签: c# .net 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();

一切正常,但有时我会收到以下错误。

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

有没有人对这个错误有所了解,或者有人能告诉我我是否做错了。

8 个答案:

答案 0 :(得分:42)

对我来说,这个错误发生是因为我有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();
                }
}

答案 1 :(得分:21)

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

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

答案 2 :(得分:5)

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

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

答案 3 :(得分:4)

最后,我使用以下代码删除了内部服务器错误消息。不确定是否有其他方法可以实现它。


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 :(得分:0)

首先查看您的错误消息我建议您重新编译整个应用程序,确保在重新编译时所有必需的dll都在bin文件夹中。

答案 5 :(得分:0)

在我的情况下,我的请求对象继承自基础对象。没有明知我用int添加了一个属性?在我的请求对象中,我的基础对象也具有与int数据类型相同的属性(同名)。我注意到这一点并删除了我在请求对象中添加的属性,之后它工作正常。

答案 6 :(得分:0)

对我来说,错误是误导性的。我通过使用SoapUI测试错误的Web服务发现了真正的错误。

答案 7 :(得分:0)

在我的情况下,我只是从SoapAction对象中删除HttpWebRequest指令。因此,我没有在.Headers.Add("SOAPAction","someurl")定义中定义HttpWebRequest,我的代码运行正常。

ResultXMLXDocumentResultString是一个字符串。

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;      
    }
}