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

Я использую C # и подключаюсь к WebService через автоматически созданный объект прокси C #. Метод, который я вызываю, может длиться долго, а иногда и время. Я получаю разные ошибки, иногда я получаю 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: --   Request timed out.  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; }    

Server Error in '/PerformanceManager' Application.

Request timed out.

Description: 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.

Exception Details: System.Web.HttpException: Request timed out.

Source Error:

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.

Stack Trace:

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


Version Information: Microsoft .NET Framework Version:2.0.50727.312; ASP.NET Version:2.0.50727.833
--.
- Client found response content type of 'text/html; charset=utf-8', but expected 'text/xml'. The request failed with the error message: -- Request timed out. 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; }

Server Error in '/PerformanceManager' Application.


Request timed out.

Description: 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.

Exception Details: System.Web.HttpException: Request timed out.

Source Error:

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.

Stack Trace:

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


Version Information: Microsoft .NET Framework Version:2.0.50727.312; ASP.NET Version:2.0.50727.833
--.

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

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

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

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

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

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

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

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

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

   

а также

   

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

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

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

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

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

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

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

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

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

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

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

Я решил сделать это и забыть о таком типе :

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

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

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

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

Проблема была связана с версией 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 – это имя classа, сгенерированного в качестве ссылки.