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

我有一个繁重的流量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()

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

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

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

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

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

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

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

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

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

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

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

在我的例子中,我只是从HttpWebRequest对象中删除SoapAction指令。 所以,我没有在HttpWebRequest定义中定义.Headers.Add("SOAPAction","someurl") ,我的代码运行正常。

ResultXML是一个XDocumentResultString是一个字符串。

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