使用JavascriptCallbackBehavior时如何使用HTTP错误代码抛出WebFaultException?

时间:2012-08-03 11:50:45

标签: javascript wcf rest cross-domain jsonp

我在客户端有一个.Net服务器应用程序(持有WCF REST JSONP服务)和一个javascript应用程序。

为了避免来自javascript端的跨域调用,我们使用JSONP进行通信。为了让我们的生活更轻松,使用来自服务器端的javascript回调,我们使用JavascriptCallbackBehavior:WCF将回调函数中的所有JSON响应包装起来。

[JavascriptCallbackBehavior(UrlParameterName = "$callback")]
[ServiceBehavior(...)]
public class MySvcREST : ISvcREST
{
   public bool SvcMethod()
   {
      throw new WebFaultException<string>("ERROR!", HttpStatusCode.InternalServerError);
   }
}

如果我使用上面的代码,我会从我的服务中得到以下回复:

HTTP/1.1 200 OK
Content-Length: 31
Content-Type: application/x-javascript
Server: Microsoft-HTTPAPI/1.0
Date: Fri, 03 Aug 2012 11:43:26 GMT

angular.callbacks._1("ERROR!",500);

EDIT1:实际上,即使我删除JavascriptCallbackBehavior并保留默认的callback名称,我也会有类似的效果,这不是很好。

我真的希望得到 HTTP 500 错误代码,而不是 HTTP 200 OK ,里面有错误。

如何解决我的问题或者是否有其他方法可以从WCF服务获取JSONP?

1 个答案:

答案 0 :(得分:0)

不幸的是我没有得到任何回复我的问题,但我发现以下,有点有用,链接:http://msdn.microsoft.com/en-us/library/ee816916.aspx

我明白这种行为是设计性的 ...虽然从javascript(jquery / angular js)开始,但在写这个时候,没有办法读取第二个返回的参数(在我的情况,http错误代码)。

所以,最后我不确定除了解决方法之外是否还有解决方案。现在我们返回CustomResult,其中包含自定义错误代码和消息。

当这些网络技术彼此不融合时,它们令人失望......你们被迫做了很多变通办法。