如何从WCF自定义MessageEncoder内部抛出异常并将其返回给客户端?

时间:2012-07-03 13:06:49

标签: wcf exception-handling

在我的WCF服务中,我实现了一个继承自System.ServiceModel.Channels.MessageEncoder

的自定义编码器

在该编码器中,我接受原始消息并在覆盖ReadMessage()方法时操纵收到的标题。

在此操作过程中,我有时可能会在标题中检测到某些内容导致邮件无效,并且我想向客户端返回一个有用的异常。

我试过了:

throw new Exception("Some useful message");

throw new FaultException("Some useful message");

它们都将HTTP 400返回给没有响应主体的客户端。

我可以高兴地从我的实际Web服务方法中抛出FaultException并将其正确地返回给客户端,但是在处理的最后阶段,我不再能够访问SOAP标头(除非有人能够告诉我们)不然我。)

如何根据SOAP标头中的信息,使用友好消息将响应500返回给客户端?

1 个答案:

答案 0 :(得分:1)

您可以致电:

OperationContext.Current.IncomingMessageHeaders

在您的服务方法中,如果您愿意,可以检查那里的标题。在我看来,自定义MessageEncoder是用来做你所描述的错误的野兽。