29

私は 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サーバーのメソッドにtry-catchがあります。私はそれをデバッグしましたが、web-server メソッドは (1 分ほどで) 例外なく戻ります。また、Web サービスに未処理の例外ハンドラーを追加しましたが、ブレークポイントはヒットしませんでした。Web サービスが返されるとすぐに、期待した結果ではなく、クライアントでこのエラーが発生します。

4

9 に答える 9

45

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

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

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

また、 Jeff Atwood のブログのこのブログ投稿もチェックしてください。このブログ記事では、ハンドルされないグローバル例外ハンドラーの実装と SOAP 例外の使用について説明しています。

于 2008-09-22T16:44:54.257 に答える
11

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

そのため、リモートWebサービスプロバイダーに相談して、失敗していることを知らせ、修正措置を講じる必要があります。Webサービスのプロバイダーでない限り、例外をキャッチし、どのエラーが発生したかをコンシューマーに通知するXMLを返す必要があります(「リモートプロバイダー」もおそらくそれを行う必要があります)。

于 2008-09-22T15:03:20.180 に答える
5

If you are using .NET version 4.0. the validateRequestion is turned on by default for all the pages. in previous versions 1.1 and 2.0 it was only for aspx page. You can turn the default validation off. In that case you have to do the due diligence and make sure that the data is clean. Use HtmlEncode. Do the following to turn the validation off

In the web.config add the following lines for system.web

 <httpRuntime requestValidationMode="2.0" />

and

 <pages validateRequest="false" />

You can read more about this http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes also http://msdn.microsoft.com/en-us/library/ff649310.aspx

Hope this helps.

于 2011-06-01T21:00:01.460 に答える
4

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

于 2008-09-22T16:53:53.550 に答える
4

これは、web.config の構成エラーの結果として発生しました。接続文字列などを確認すると、タイムアウトの答えになる場合があります。

于 2012-06-20T11:20:15.617 に答える
3

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

于 2015-06-12T10:47:51.610 に答える