WCF-拦截消息并发送自定义响应

本文关键字:自定义 响应 并发 消息 WCF- | 更新日期: 2023-09-27 18:25:54

我需要一个我创建的WCF服务能够进入"只读"模式。在这种状态下,它不会为将对数据库进行更改的调用(如创建订单)提供服务,而只为只读请求(如验证用户)提供服务。如果它收到一个不提供服务的请求,它需要传回一条友好的消息和代码(例如,代码:100,描述:"服务处于只读模式,无法为该请求提供服务")。

我有近100个不同的调用,我想实现一个可以在一个地方进行的解决方案(比如IDispatchMessageInspector),但我看不到对任何截获的WCF消息提供响应的方法。我有一个标准的响应类型,我在所有请求时都会发回,在这种情况下也会发回。该类型名为ServiceResponse,具有一个消息集合。它是一类代码和描述。

public class ServiceResponse
{
    public List<Message> Messages {get; set;}
}
public class Message
{
    public string Code {get; set;}
    public string Description {get; set;}
}

有人能为我提供如何做到这一点的指导吗?我已经用尽了所有的搜索选项。

即使WCF中只有一种方法可以手动创建我要发送回的SOAP,只要我不必在每个服务调用中处理只读检查/响应,那也没关系。

谢谢!

WCF-拦截消息并发送自定义响应

我看到了几个选择。1) 将功能添加到服务实现中(其中100个),2)找到一个面向方面的工具来在运行时拦截服务调用并执行不同的代码,或者3)使用自定义HTTPHandler拦截所有wcf请求。在处理程序中,您可以处理请求并向客户端返回响应。以下是一些可能有助于的链接

http://blogs.msdn.com/b/wenlong/archive/2007/09/18/how-to-use-asmx-extension-to-handle-wcf-requests.aspx

用于挂接*.svc请求的HttpHandler

您可以通过自定义ServiceAuthorizationManager来实现这一点。

这个想法将是

  • 为在只读模式下要禁用的每个类添加一个自定义属性
  • 在自定义ServiceAuthorizationManager中,检查服务是否处于只读模式。如果是,请检查要调用的方法上的自定义属性。该方法由请求消息操作标头指示。服务的类型可以从OperationContext.InstanceContext中找到(我想-我记不清是什么属性了)
  • 如果找到该属性,则抛出一个带有正确错误消息的故障异常