web-dev-qa-db-ja.com

「クライアントは「text / html」の応答コンテンツタイプを見つけました。」エラーをどのように解釈できますか。

C#を使用しており、自動生成されたC#プロキシオブジェクトを介して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.
-->
--.

編集:私は、Webサーバー上のメソッドの周りにトライキャッチを持っています。デバッグしましたが、Webサーバーメソッドは例外なく(1分ほどで)戻ります。また、Webサービスに未処理の例外ハンドラーと、ヒットしなかったブレークポイントを追加しました。 Webサービスが戻るとすぐに、予想した結果ではなく、クライアントでこのエラーが発生します。

26
Scott Langham

これは、Webサービスに未処理の例外があり、.NETランタイムがXMLではなく、死亡サーバーエラー/例外ダンプページのHTML黄色い画面を吐き出しているために発生しています。

Webサービスのコンシューマーはtext/xmlヘッダーを予期していましたが、代わりにtext/htmlを取得していたため、そのエラーがスローされます。

タイムアウトの原因に対処する必要があります(おそらく長いSQLクエリですか?)。

また、チェックアウト このブログ記事 Jeff Atwoodのブログで、グローバルな未処理の例外ハンドラーの実装とSOAP exceptions。

41
Seibar

つまり、消費者はWebサービスからのXMLを期待していますが、Webサービスはタイムアウトが原因で失敗しているため、エラーが示すようにHTMLを返します。

したがって、リモートWebサービスプロバイダーに連絡して、障害が発生していることを通知し、修正アクションを実行する必要があります。あなたがウェブサービスのプロバイダーでない限り、例外をキャッチして、どのエラーが発生したかをコンシューマに伝えるXMLを返す必要があります(「リモートプロバイダー」もおそらくそれを行う必要があります)。

9
Vinko Vrsalovic

.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

お役に立てれば。

5
Mhoque

Web.configの構成エラーの結果としてこれが発生しました。接続文字列などをチェックすることは、タイムアウトの答えかもしれません。

4
oekstrem

Webサーバーがhttp 500エラーコードを返しています。これらのエラーは通常、Webサーバーで例外がスローされたときに発生し、それをキャッチするロジックがないため、HTTP 500エラーが発生します。通常、コードにtry-catchブロックを配置することで問題を解決できます。

4
bastos.sergio

Web.configファイルを削除して、もう一度挿入します。 http://forums.asp.net/post/916808.aspx

3
Asim Olmez

Webサービスの戻り値のタイプと SoapDocumentMethod を変更すると、このエラーが発生しました。

最初は:

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

fire and forget type このようにすることにしました:

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

このような場合、Web参照の更新が役立ちました。

Webサービス参照を更新するには:

  • ソリューションエクスプローラーを展開する
  • Web参照の検索-これは、プロジェクトにWebサービス参照を追加した場合にのみ表示されます
  • 右クリックして、Webリファレンスの更新をクリックします
1
student

WebサービスはIISで正しく構成されていますか?プールを使用して、ASP.NET(2.0)のバージョンが設定されていますか? .asmxを閲覧できますか?

例外について話して、Webサービスにアクセスする行にtry-catchブロックを入れてみてください。 Put and catch(System.Web.Services.Protocolos.SoapException)。

また、Webサービスオブジェクトのタイムアウトを設定できます。

1
Erup

私が抱えていた問題は、SOAP version。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は、参照として生成されたクラスの名前です。

0
Phi