我需要一个我创建的WCF服务才能进入“只读”模式。在此状态下,它不会为将对数据库进行更改的调用请求(如创建订单)提供服务,但只会为只读请求(如身份验证用户)提供服务。如果它收到一个它不会服务的请求,它需要传回一个友好的消息和代码(例如CODE:100,DESCRIPTION:“Service处于只读模式,不能为此请求提供服务”)。
我有近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,只要我不必在每次服务调用中处理只读检查/响应,那就没问题。
谢谢!
答案 0 :(得分:1)
我看到了几个选择。 1)将功能添加到服务实现中(其中100个),2)找到面向方面的工具以在运行时拦截服务调用并执行不同的代码,或者3)使用自定义HTTPHandler拦截所有wcf请求。在处理程序中,您可以处理请求并将响应返回给客户端。以下是一些可能有用的链接
答案 1 :(得分:1)
您可以使用custom ServiceAuthorizationManager实现此目的。
这个想法将是
ServiceAuthorizationManager
中,检查服务是否处于只读模式。如果是,请检查您尝试呼叫的方法的自定义属性。该方法由请求消息动作头指示。服务的类型可以从OperationContext.InstanceContext
找到(我想 - 我不记得具体属性)