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

Как можно интерпретировать ошибку "Клиент нашел тип содержимого ответа" text/html "..

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

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

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.]
</pre></code>

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

            <br>

            <hr width=100% size=1 color=silver>

            <b>Version Information:</b> Microsoft .NET Framework Version:2.0.50727.312; ASP.NET Version:2.0.50727.833

            </font>

    </body>
</html>
<!-- 
[HttpException]: Request timed out.
-->
--.

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

Если вы используете .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

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

Ответ 5

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

Ответ 7

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

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

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

Ответ 8

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

Первоначально это было:

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

Я решил сделать огонь и забыть тип следующим образом:

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

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

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

  • Развернуть проводник решений
  • Найти Ссылки на веб-сайты - это будет видно, только если вы добавили ссылку на веб-службу в свой проект
  • Щелкните правой кнопкой мыши и нажмите кнопку обновления веб-ссылки