私は次のブログ投稿の原則に従っており、Visual Studio 2010 の組み込み Web サーバーを使用して WCF サービスをデバッグすると、期待どおりの動作が得られます。
http://zamd.net/2008/07/08/error-handling-with-webhttpbinding-for-ajaxjson/
アプリケーションが FaultException() をスローすると、ローカル マシンでその障害の JSON 表現を確認できます。アプリケーションは、適切な HttpStatusCode (この場合は 401 Unauthorized) も返します。これは望ましい動作です。
{"Code":"UserNotLoggedInFault","DisplayText":"You must be logged in to access this resource.","InternalText":"User is not logged in"}
ただし、アプリケーションを IIS 7.0 に展開すると、正しい HttpStatusCode が返されますが、返される html はステータス コードに関連付けられた汎用テキストです。
このディレクトリまたはページを表示する権限がありません。
これはローカルで動作しているため、問題は IIS の構成設定にあると思います。エラー ステータスをインターセプトしていた IIS: Error Pages の値を既に削除しました (%SystemDrive%\inetpub\custerr\\401.htm から書式設定された HTML を返すために使用されていました)。
200 の範囲外の HTTP ステータスが返されたときに JSON 応答を通過させるために変更する必要がある IIS 設定を知っている人はいますか? ...または、他に何かする必要があるのでしょうか?
更新 #1
これは、アプリケーションが HttpStatusCode を Unauthorized (401) に設定する FaultException をスローした場合にのみ発生しているようです。アプリケーションが 404 Not Found のステータス コードを返した場合、JSON は正しく返されています。
問題はまだ残っていますが、401 Unauthorized ステータス コードを返す場合にのみ適用されると思います。
Charles Web Proxy によってキャプチャされたレスポンスのスクリーンショットを次に示します。
ローカルマシンにアクセスすると、次のようになります
更新 #2
そのため、リモートデスクトップでサーバーに接続し、localhost 経由でサイトにアクセスした場合、これは発生しません。認証が必要な URL にアクセスすると、適切な JSON オブジェクトが返されます。
これは、IIS が 401 ステータス コードを別の方法で処理し、認証されていないユーザーが適切な応答から保護されていることを意味するのでしょうか?