【问题标题】:How can I throw an exception from inside a WCF custom MessageEncoder and return it to the client?如何从 WCF 自定义 MessageEncoder 中引发异常并将其返回给客户端?
【发布时间】:2012-07-03 13:06:48
【问题描述】:

在我的 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?

【问题讨论】:

    标签: wcf exception-handling


    【解决方案1】:

    您可以致电:

    OperationContext.Current.IncomingMessageHeaders
    

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

    【讨论】:

    • 我同意你的观点,但我别无选择,只能在这个早期阶段检查标题。我们受国家授权实施 WCF 根本无法实现的安全方案。话虽如此,在编码器中做最少的事情并使用您的方法引发异常似乎是一个很好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2023-03-30
    • 2023-03-19
    • 2013-01-01
    • 1970-01-01
    相关资源
    最近更新 更多