我使用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文件吗?
任何建议都将受到高度赞赏。感谢
答案 0 :(得分:1)
当响应返回时,HttpClient不会抛出异常,但不会“成功”。如果您确实希望在客户端抛出异常,请调用
response.EnsureResponseIsSuccessful();
否则,只需检查客户端上的状态代码,然后根据该值确定要执行的操作。
您不能在服务器上抛出异常,并希望将异常传播到客户端。 HTTP没有任何异常的概念。