WCFサービスを呼び出すjQueryがいくつかあります。WebFaultException
サービスでエラーが発生すると、説明と500 Internal Server Error
ステータスコードを含むがスローされます。
クライアント側、私は次のようなことをしています。
$.ajax({
url: BaseUrl + 'ThisShouldThrowAnException',
type: 'GET',
dataType: 'jsonp',
crossDomain: true,
success: function (data) {
// this should never be called
alert("Got data: " + data);
},
error: function (jqXHR, status, message) { // never called
// would like this to handle my status code
alert(status + " " + message);
}
});
ローカルIISサーバーでは、呼び出されている対応するコードは次のように指定されます。
[OperationContract]
[WebGet(RequestFormat=WebMessageFormat.Json)]
bool ThisShouldThrowAnException();
public bool ThisShouldThrowAnException()
{
throw new WebFaultException<String>("Something really bad happened.", HttpStatusCode.InternalServerError);
}
問題は、この呼び出しを行うと、success関数が呼び出されることです。jQueryは私を飲み込んでいるようで500 Internal Server Error
、代わりにを与えてくれます200 OK
。Fiddlerを使用して検査すると、応答ステータスコードが。であることがわかります200 OK
。ブラウザ経由で電話をかけたとき、またはリクエストを手作りした場合、適切なを受け取ります500 Internal Server Error
。
私の質問は次のとおりです。通話のWebExceptionFault
内部をどのように処理できますか?$.ajax(...)
現状では、$.ajax
は渡されるステータスコードを完全に無視しています。
とを使用してみajaxError
ましstatusCode
たが、どちらも機能しませんでした。
$('#error').ajaxError(function() {
alert("An error occurred");
});
$.ajax({
url: BaseUrl + 'ThisShouldThrowAnException',
type: 'GET',
dataType: 'jsonp',
crossDomain: true,
success: function (data) {
alert("Got data: " + data);
},
statusCode: {
500: function() {
alert("Got 500 Internal Server Error");
}
},
error: function (jqXHR, status, message) {
alert(status + " " + message);
}
});
新しい発見
さらに分析すると、jQueryが生成するクエリ文字列を調べたところ、次の文字列が次のように返されることがわかりました200 OK
。
http://localhost/RestService/RestService.svc/ThisShouldThrowAnException?callback=jQuery172003801283869839445_1341495740773&_=1341495740777
// on page:
jQuery172003801283869839445_1341495740773("Something really bad happened.",500);
一方、次のリクエストは:を返します500 Internal Server Error
。
http://localhost/RestService/RestService.svc/ThisShouldThrowAnException
// on page:
"Something really bad happened"