500 внутренних ошибок сервера в GetResponse()
У меня есть страница трафика 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) Внутренняя ошибка сервера. в System.Net.HttpWebRequest.GetResponse()
Есть ли у кого-нибудь идеи об этой ошибке, или кто-нибудь может сказать мне, если я ошибаюсь.
Спасибо
Ответы
Ответ 1
Наконец, я избавляюсь от сообщения об ошибке внутреннего сервера со следующим кодом. Не уверен, есть ли другой способ его достижения.
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())
{
}
Ответ 2
Для меня эта ошибка возникла из-за того, что у меня было два действия веб-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();
}
}
Ответ 3
Из этой ошибки я бы сказал, что ваш код в порядке, по крайней мере, тот, который вызывает веб-сервис. Ошибка, похоже, находится в фактической веб-службе.
Чтобы получить сообщение об ошибке с веб-сервера, добавьте попытку catch и поймайте WebException. У WebException есть свойство Response, которое является HttpResponse. вы можете зарегистрировать все, что возвращается, и загрузить код. Вернитесь позже в журналы и посмотрите, что на самом деле возвращается.
Ответ 4
Вы пытались указать UserAgent для вашего запроса? Например:
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
Ответ 5
глядя на ваше сообщение об ошибке, прежде всего, я предлагаю вам перекомпилировать все ваше приложение, убедитесь, что все необходимые библиотеки DLL находятся в папке bin при перекомпиляции.
Ответ 6
В моем случае объект запроса, унаследованный от базового объекта. Без заведомо я добавил свойство с int? в моем объекте запроса и моем базовом объекте также имеет одно и то же свойство (одно имя) с типом данных int. Я заметил это и удалил свойство, которое я добавил в объект запроса, и после этого он работал нормально.
Ответ 7
Для меня ошибка была введена в заблуждение. Я обнаружил истинную ошибку, проверив ошибочную веб-службу с помощью SoapUI.
Ответ 8
В моем случае я просто удаляю инструкцию 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;
}
}