REST中的异常处理

时间:2011-03-07 04:09:14

标签: rest exception-handling wcf

我使用WCF创建了一个REST服务,用于从UI与BLL / DAL进行通信。现在,我想通过REST中的一些全球化方式实现异常处理。我正在使用HTTPClient与客户端的REST进行通信。以下是我实现异常处理的方法:

方法1:

OutgoingWebResponseContext response = WebOperationContext.Current.OutgoingResponse;
response.StatusCode = System.Net.HttpStatusCode.Unauthorized;
response.StatusDescription = ex.Message;
success = false;

方法2:

throw new WebProtocolException(HttpStatusCode.NotFound, ex.Message, null);

但不知怎的,我无法在客户端捕获它们。请提出一些建议,以便处理全球服务引发的异常。


我正在抛出WebProtocolException(方法2)以及从服务到UI的错误代码和错误消息,以便通知用户有关异常的信息。我能够在UI端收到错误代码,但没有收到错误消息或详细信息。

然后我创建了另一个服务(扩展名为.svc)并在服务的标记中添加了以下行:“Factory ='Microsoft.ServiceModel.Web.WebServiceHost2Factory'”。现在,我能够在客户端(UI)上收到错误消息以及错误代码。

有人可以让我知道如何在现有服务中使用WebServiceHost2Factory方法,这是一个类文件而不是.svc文件吗?

任何建议都将受到高度赞赏。感谢

1 个答案:

答案 0 :(得分:1)

当响应返回时,HttpClient不会抛出异常,但不会“成功”。如果您确实希望在客户端抛出异常,请调用

response.EnsureResponseIsSuccessful();

否则,只需检查客户端上的状态代码,然后根据该值确定要执行的操作。

您不能在服务器上抛出异常,并希望将异常传播到客户端。 HTTP没有任何异常的概念。