0

他のバインディングの中でも、JSON の入力/結果に WebHttpBinding を使用する WCF サービスがあります。

何か問題が発生したときに StatusCode を 400 に設定し、JSON のわかりやすいメッセージを返すことができるように、カスタム IErrorHandler 実装を作成しました。これは、どこにでもあるストレートな実装です (こちらで説明されている良い方法です)。

私の問題は、Visual Studio Web Development Server (Cassini) を使用してローカルでテストすると、完全に動作することです。ただし、テスト サーバー (IIS およびその他すべての標準構成を備えた Windows 2008) に展開すると、機能しません。

それを呼び出して Firebug でデバッグすると、リターンとして HttpStatusCode 200 が返され、応答テキストは返されません。Fiddler を使用すると、HttpStatusCode 504 が返され、まったく返されません。ただし、私が予想した動作 (およびローカルで発生する動作) は、responseText が設定された ajax 呼び出しのエラー コールバックへの呼び出しです。

リモートでデバッグしましたが、すべて問題ないようです。実行パイプラインに問題はなく、すべてのクラスがローカルと同じように呼び出されますが、機能しません。

助言がありますか?これを理解するためのオプションはほとんどありません。

どうもありがとう!

4

2 に答える 2

0

同様の問題があり、解決できました。IIS の設定を見てみましょう。この問題をどのように克服したかについての詳細は、この投稿にあります: HTTP ステータス コードが 401 Unauthorized の場合、IErrorHandler が間違ったメッセージ本文を返す

于 2016-07-15T18:45:58.933 に答える
0

firebug と fiddler が異なる結果を出している場合、直接 telnet してリクエストを実行するとどうなりますか (次のようなもの:)

    GET /VirtualDirectoryAndGetData HTTP/1.1
    HOST: example.com
    [carriage return]

どういうわけか奇妙なヘッダー/フォーマットが戻ってきても驚かないでしょう(firebug/fiddlerが同意しない理由を説明するため)

テストするもう1つのことは、開発マシンに公開して、それがマシン固有の問題なのか、サーバー対開発Webサーバーの問題なのかを確認することです.

VS以外の場所で発生している場合は、設定した行をコメントアウトすることもできます

  rmp.StatusCode = System.Net.HttpStatusCode.BadRequest;
  rmp.StatusDescription = "Bad request";

これは、応答コードの問題かエラー ハンドラーの問題かを示している可能性があります。

質問を編集して結果を含めることができる場合 (機密情報を削除して)、さらに追跡できるかどうかを確認します。

編集:質問をもう一度見た後、サーバーが応答を送信する前にエラーが発生している可能性があります。FF はデフォルトで 200 を想定する場合がありますが、つまり 504 (ゲートウェイ タイムアウト) を想定する場合があります。これは完全な憶測ですが、可能です。イベント ログに何か表示されますか?

于 2010-08-26T18:50:32.570 に答える