我有一个繁重的流量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()
有没有人对这个错误有所了解,或者有人能告诉我我是否做错了。
答案 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
,我的代码运行正常。
ResultXML
是XDocument
。
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;
}
}