Подтвердить что ты не робот

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

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

Спасибо

4b9b3361

Ответ 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;      
    }
}