C# 在jQuery AJAX调用中处理WebFaultException
我有一些jQuery可以调用WCF服务。当服务遇到错误时,它会抛出一个带有说明的C# 在jQuery AJAX调用中处理WebFaultException,c#,jquery,wcf,exception-handling,http-status-codes,C#,Jquery,Wcf,Exception Handling,Http Status Codes,我有一些jQuery可以调用WCF服务。当服务遇到错误时,它会抛出一个带有说明的WebFaultException,以及一个500内部服务器错误状态代码 客户方面,我正在做以下工作: $.ajax({ url: BaseUrl + 'ThisShouldThrowAnException', type: 'GET', dataType: 'jsonp', crossDomain: true, success: function (data) {
WebFaultException
,以及一个500内部服务器错误
状态代码
客户方面,我正在做以下工作:
$.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);
}
新发现 在进一步的分析中,当我检查jQuery生成的查询字符串时,我发现以下内容返回一个
200OK
:
http://localhost/RestService/RestService.svc/ThisShouldThrowAnException?callback=jQuery172003801283869839445_1341495740773&_=1341495740777
// on page:
jQuery172003801283869839445_1341495740773("Something really bad happened.",500);
同时,以下请求返回500内部服务器错误
:
http://localhost/RestService/RestService.svc/ThisShouldThrowAnException
// on page:
"Something really bad happened"
错误处理程序不会为jsonp请求触发。文档中有以下关于错误的免责声明(jqXHR、textStatus、ERRORSHORN): 注意:跨域脚本和JSONP请求不调用此处理程序 如果您可以选择切换到json和crossDomain=false,则应启动错误处理程序 在这个话题上有一个类似的问题 所以这个问题建议捕获服务器上的任何错误,总是返回200并在有效负载中返回响应代码。 在“数据类型”一节中,他们提到 jsonp类型附加了一个查询字符串参数callback=?到 网址。服务器应该在JSON数据前面加上回调名称,以便 形成有效的JSONP响应。我们可以指定另一个参数名 然后使用jsonp选项回调$.ajax() 从远程服务器检索数据时(这是唯一可能的 使用脚本或jsonp数据类型),错误回调和全局 事件永远不会被触发。 这就是为什么你的错误回调没有被触发,它直接进入成功回调 编辑:成功函数中的数据是什么样子的?因为据我所知,从服务器返回的任何内容都作为数据传入 下面是一个使用JSONP使用WCF Web服务的示例 关键点是,WCF看到您正在请求JSONP数据,并且您提供了一个名为“callback”的查询字符串参数。因此,WCF自动返回200 OK(与实际状态无关)和远程功能返回的任何数据 进一步阅读JSONP的实际工作原理: 如果您阅读了JSONP的工作原理,就会意识到jQuery不太可能返回实际的错误状态,因为服务器本身并不返回它
关于您当前的问题,请切换到JSON请求。如果这是不可能的,您可以始终在ajax success函数中检查数据对象。当您返回它时,它将有错误代码500 您是否在错误函数>>var msg=JSON.parse(jqXHR.responseText)中尝试过这个操作;警报(消息);这不会改变什么。从一开始就没有调用错误处理程序。很抱歉误读了您的问题。我使用这个ajaxError来检查我的url是否有这样的问题:.ajaxError(函数(e,xhr,settings,exception){If(settings.url==“Default.aspx/GetDat”){alert('url无法调用');});有一个属性名为
ajaxError
?我在文档中没有看到这一点。您如何解释在jQuery之外发出的裸web请求返回HTTP 200错误的事实?在我开始使用jQuery之前,我已经遇到了一些问题,我的浏览器告诉我请求时200 OK
应该显示500错误。我只能猜测浏览器没有请求text/json,因此您没有使用实际的ThisShouldThrowAnException()方法。我将更新我的答案,并对成功中的响应代码进行评论。
http://localhost/RestService/RestService.svc/ThisShouldThrowAnException
// on page:
"Something really bad happened"