500 внутренняя ошибка сервера в GetResponse () - PullRequest
24 голосов
/ 04 ноября 2010

У меня страница 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 ()

Кто-нибудь имеет представление об этой ошибке или кто-нибудь может сказать мне, если я делаю неправильно.

Ответы [ 8 ]

43 голосов
/ 19 февраля 2014

Для меня эта ошибка произошла, потому что у меня было 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();
                }
}
21 голосов
/ 04 ноября 2010

Из этой ошибки я бы сказал, что ваш код в порядке, по крайней мере, та часть, которая вызывает веб-сервис.Кажется, ошибка в самом веб-сервисе.

Чтобы получить ошибку с веб-сервера, добавьте попытку catch и перехватите WebException.У WebException есть свойство Response, которое является HttpResponse.Вы можете зарегистрировать все, что возвращается, и загрузить свой код.Проверьте позже в журналах и посмотрите, что на самом деле возвращается.

5 голосов
/ 01 августа 2013

Вы пытались указать UserAgent для вашего запроса? Например:

request.UserAgent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
4 голосов
/ 08 ноября 2010

Наконец-то я избавился от внутреннего сообщения об ошибке сервера со следующим кодом.Не уверен, есть ли другой способ добиться этого.


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);
    }
}
<b>
using (WebResponse webResponse = request.GetResponse())
{
}
</b>
0 голосов
/ 19 августа 2017

В моем случае я просто удаляю инструкцию 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;      
    }
}
0 голосов
/ 28 марта 2017

Для меня ошибка вводила в заблуждение.Я обнаружил истинную ошибку, протестировав ошибочный веб-сервис с SoapUI.

0 голосов
/ 11 ноября 2016

В моем случае мой объект запроса унаследован от базового объекта.Не зря я добавил свойство с int?в моем запросе объект и мой базовый объект также имеют одно и то же свойство (то же имя) с типом данных int.Я заметил это и удалил свойство, которое я добавил в объект запроса, и после этого он работал нормально.

0 голосов
/ 18 августа 2016

в первую очередь, глядя на ваше сообщение об ошибке, я бы посоветовал вам перекомпилировать все приложение целиком, при перекомпиляции убедитесь, что все необходимые библиотеки находятся в папке bin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...