REST中的异常处理

REST中的异常处理,rest,exception-handling,wcf,Rest,Exception Handling,Wcf,我已经使用WCF创建了一个REST服务,用于从UI与BLL/DAL通信。现在,我想在REST中通过某种全球化的方式实现异常处理。我正在使用HTTPClient从客户端与REST通信。以下是我实现异常处理的方法: 方法1: OutgoingWebResponseContext response = WebOperationContext.Current.OutgoingResponse; response.StatusCode = System.Net.HttpStatusCode.Unautho

我已经使用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文件


如有任何建议,将不胜感激。谢谢

HttpClient在响应返回时未“成功”时不会引发异常。如果您确实希望在客户端抛出异常,那么调用

response.EnsureResponseIsSuccessful();
否则,只需检查客户端上的状态代码,并根据该值决定要做什么


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

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

response.EnsureResponseIsSuccessful();
否则,只需检查客户端上的状态代码,并根据该值决定要做什么


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

我已经在调用“response.EnsureResponseIsSuccessful”方法。我能够验证状态代码,但无法检查从服务传递到客户端的状态描述。您能否建议我如何将详细的错误消息传递给客户端,以便通知他们服务中发生的确切错误。@Anil C Ahh,我认为这是HTTP堆栈实现中的一个错误。它在下一代HttpClient at中得到了修复,他们现在也得到了名称“ReasonPhrase”。@Anil C没有使用状态描述,为什么不使用响应体来解释问题呢。这就是RFC2616建议你做的。我已经修改了我的问题。请提出其他建议。我已经在调用“response.EnsureResponseIsSuccessful”方法。我能够验证状态代码,但无法检查从服务传递到客户端的状态描述。您能否建议我如何将详细的错误消息传递给客户端,以便通知他们服务中发生的确切错误。@Anil C Ahh,我认为这是HTTP堆栈实现中的一个错误。它在下一代HttpClient at中得到了修复,他们现在也得到了名称“ReasonPhrase”。@Anil C没有使用状态描述,为什么不使用响应体来解释问题呢。这就是RFC2616建议你做的。我已经修改了我的问题。敬请提出其他建议。我不想成为坏消息的传播者,但WebServiceHost2Factory在REST初学者工具包中,该工具包已被弃用,并且在.Net 4发布后,许可证有效地阻止了它的使用。我不想成为坏消息的传播者,但是WebServiceHost2Factory包含在REST初学者工具包中,该工具包已被弃用,并且在.NET4发布后,该许可证有效地阻止了对它的使用。