我已经调用了wcf服务,并且实现了IClientMessageInspector接口。
我想处理AfterReceiveReply上的错误。故障异常应始终返回200状态代码以及自定义消息和错误代码。它不应在服务调用上引发任何异常。
public void AfterReceiveReply(ref Message reply, object correlationState)
{
if (reply.IsFault)
{
// wrap message with http status code 200 and return content as exception model like status code, exception message;
}
}
我想处理异常,它总是返回响应,而不会在客户代码中处理任何异常。
谢谢
答案 0 :(得分:0)
您可以尝试HttpResponseMessageProperty,它包含返回的Message的状态代码。
if (reply.IsFault)
{
if (reply.Properties.ContainsKey(HttpResponseMessageProperty.Name))
{
HttpResponseMessageProperty pro = reply.Properties[HttpResponseMessageProperty.Name] as HttpResponseMessageProperty;
pro.StatusCode = System.Net.HttpStatusCode.OK;
}
else
{
reply.Properties.Add(HttpResponseMessageProperty.Name, new HttpResponseMessageProperty { StatusCode = System.Net.HttpStatusCode.OK });
}
}
但是消息已由服务器返回,如果服务器引发异常,则可能无法在AfterReceiveReply方法中接收消息。
如果这不起作用,建议您可以在发送响应之前使用服务器端的IDispatchMessageInspector更改状态代码。 (如果您可以控制服务器端) http://mark.mymonster.nl/2011/02/10/make-use-of-wcf-faultcontracts-in-silverlight-clients/