Как интерпретировать ошибку «Клиент обнаружил тип содержимого ответа« text / html »..» - PullRequest
25 голосов
/ 22 сентября 2008

Я использую C # и подключаюсь к WebService через автоматически сгенерированный прокси-объект C #. Метод, который я вызываю, может работать долго, а иногда и время ожидания. Я получаю разные ошибки обратно, иногда я получаю System.Net.WebException или System.Web.Services.Protocols.SoapException. У этих исключений есть свойства, которые я могу запросить, чтобы найти конкретный тип ошибки, из которой я могу отобразить удобную для пользователя версию для пользователя.

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

<code>Client found response content type of 'text/html; charset=utf-8', but expected 'text/xml'.
The request failed with the error message:
--
<html>
    <head>
    <title>Request timed out.</title>
                        <style>
         body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;} 
         p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
         b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
         H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
         H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
         pre {font-family:"Lucida Console";font-size: .9em}
         .marker {font-weight: bold; color: black;text-decoration: none;}
         .version {color: gray;}
         .error {margin-bottom: 10px;}
         .expandable { text-decoration:underline; font-weight:bold;     color:navy;         cursor:hand; }
        </style>
    </head>

    <body bgcolor="white">

            <span><H1>Server Error in '/PerformanceManager' Application.<hr     width=100% size=1 color=silver></H1>

            <h2> <i>Request timed out.</i> </h2></span>

            <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">

            <b> Description: </b>An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

            <br><br>

            <b> Exception Details: </b>System.Web.HttpException: Request timed out.<br><br>

            <b>Source Error:</b> <br><br>

            <table width=100% bgcolor="#ffffcc">
               <tr>
                  <td>
                      <code>

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.</code>

                  </td>
               </tr>
            </table>

            <br>

            <b>Stack Trace:</b> <br><br>

            <table width=100% bgcolor="#ffffcc">
                   <tr>
                  <td>
                      <code><pre>

[HttpException (0x80004005): Request timed out.]


Информация о версии: Microsoft .NET Framework Версия: 2.0.50727.312; ASP.NET версия: 2.0.50727.833 <! - [HttpException]: истекло время ожидания запроса. -> -.

Edit: У меня есть попытка поймать метод на веб-сервере. Я отладил его, и метод веб-сервера возвращается (через минуту или около того) без каких-либо исключений. Я также добавил необработанный обработчик исключений в веб-сервис, и точка останова там не была достигнута. Как только веб-сервис возвращается, я получаю эту ошибку в клиенте вместо ожидаемого результата.

Ответы [ 9 ]

40 голосов
/ 22 сентября 2008

Это происходит из-за того, что в вашем веб-сервисе есть необработанное исключение, и среда выполнения .NET выплевывает свой желтый HTML-экран страницы с сообщением об ошибке / исключительной ситуации сервера смерти вместо XML.

Поскольку пользователь вашего веб-сервиса ожидал заголовок text / xml и вместо него получил text / html, он выдает эту ошибку.

Вам следует устранить причину истечения времени ожидания (возможно, длинный запрос SQL?).

Кроме того, закажите этот пост в блоге Джеффа Этвуда, в котором объясняется реализация глобального обработчика необработанных исключений и использование исключений SOAP.

9 голосов
/ 22 сентября 2008

Это означает, что ваш потребитель ожидает XML от веб-сервиса, но веб-сервис, как показывает ваша ошибка, возвращает HTML, потому что он не работает из-за тайм-аута.

Итак, вам нужно поговорить с удаленным поставщиком веб-услуг, чтобы сообщить им, что он не работает, и предпринять корректирующие действия. Если вы не являетесь поставщиком веб-службы, в этом случае вы должны перехватить исключения и вернуть XML, сообщающий потребителю, какая ошибка произошла (вероятно, «удаленный поставщик» также должен это делать).

5 голосов
/ 02 июня 2011

Если вы используете .NET версии 4.0. validateRequestion включен по умолчанию для всех страниц. в предыдущих версиях 1.1 и 2.0 это было только для страницы aspx. Вы можете отключить проверку по умолчанию. В этом случае вы должны провести комплексную проверку и убедиться, что данные чистые. Используйте HtmlEncode. Выполните следующие действия, чтобы отключить проверку

В web.config добавьте следующие строки для system.web

 <httpRuntime requestValidationMode="2.0" />

и

 <pages validateRequest="false" />

Вы можете узнать больше об этом http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes также http://msdn.microsoft.com/en-us/library/ff649310.aspx

Надеюсь, это поможет.

4 голосов
/ 20 июня 2012

Это произошло в результате ошибки конфигурации в web.config. Проверка строки подключения и т. Д. Может быть ответом на время ожидания.

4 голосов
/ 22 сентября 2008

Веб-сервер возвращает код ошибки http 500. Эти ошибки обычно возникают, когда на веб-сервере выдается исключение, и нет логики его перехватывать, поэтому оно выдает ошибку http 500. Обычно вы можете решить проблему, поместив блоки try-catch в ваш код.

3 голосов
/ 12 июня 2015

Удалите файл web.config и вставьте снова. http://forums.asp.net/post/916808.aspx

1 голос
/ 24 ноября 2015

Я получил эту ошибку после изменения типа возврата веб-службы и SoapDocumentMethod .

Изначально это было:

[WebMethod]
public int Foo()
{
    return 0;
}

Я решил заставить его выстрелить и забыть набрать вот так:

[SoapDocumentMethod(OneWay = true)]
[WebMethod]
public void Foo()
{
    return;
}

В таких случаях помогло обновление веб-ссылки.

Чтобы обновить ссылку на веб-сервис:

  • Развернуть обозреватель решений
  • Найдите Веб-ссылки - это будет видно только в том случае, если вы добавили ссылку на веб-сервис в свой проект
  • Щелкните правой кнопкой мыши и выберите обновить веб-ссылку
1 голос
/ 04 августа 2009

Правильно ли настроен ваш веб-сервис в IIS? Пул его использует, версия ASP.NET (2.0) установлена? Можете ли вы просмотреть .asmx?

Говоря об исключениях, попробуйте поместить блок try-catch в строку, которая обращается к вашему веб-сервису. Положите и поймать (System.Web.Services.Protocolos.SoapException).

Кроме того, вы можете установить время ожидания для вашего объекта веб-сервиса.

0 голосов
/ 15 августа 2018

Проблема, с которой я столкнулся, была связана с версией SOAP. Служба asmx была настроена для приема обеих версий, 1.1 и 1.2, поэтому я думаю, что когда вы используете службу, клиент или сервер не знают, какую версию разрешить.

Чтобы это исправить, необходимо добавить:

using (wsWebService yourService = new wsWebService())
{
    yourService.Url = "https://myUrlService.com/wsWebService.asmx?op=someOption";
    yourService.UseDefaultCredentials = true; // this line depends on your authentication type
    yourService.SoapVersion = SoapProtocolVersion.Soap11; // asign the version of SOAP
    var result = yourService.SomeMethod("Parameter");
}

Где wsWebService - имя класса, сгенерированного как ссылка.

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