C# 创建WCF操作调用程序

C# 创建WCF操作调用程序,c#,.net,wcf,wcf-rest,C#,.net,Wcf,Wcf Rest,如何在resfull wcf服务中创建以下模型 操作行为调用自定义操作调用器,该调用器根据Http请求头中传递的输入/值执行验证。验证成功后,用户将被重定向到实际操作。否则将引发自定义异常,并将用户重定向到“拒绝访问”页面。实现自定义验证的一种方法是通过服务。考虑下面的代码: [ServiceContract] public interface IService { [OperationContract] string GetData(int value); } public

如何在resfull wcf服务中创建以下模型


操作行为调用自定义操作调用器,该调用器根据Http请求头中传递的输入/值执行验证。验证成功后,用户将被重定向到实际操作。否则将引发自定义异常,并将用户重定向到“拒绝访问”页面。

实现自定义验证的一种方法是通过服务。考虑下面的代码:

[ServiceContract]
public interface IService
{
    [OperationContract]
    string GetData(int value);
}

public class Service : IService
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }
}

public class ServiceValidationDecorator : IService
{
    private readonly IService m_DecoreatedService;

    public ServiceValidationDecorator(IService decoreated_service)
    {
        m_DecoreatedService = decoreated_service;
    }

    public string GetData(int value)
    {

        IncomingWebRequestContext request = WebOperationContext.Current.IncomingRequest;

        WebHeaderCollection headers = request.Headers;

        //Here use the headers to do you custom validation
        bool valid = ...

        if(!valid)
            throw new SecurityException("Access Denied");

        return m_DecoreatedService.GetData(value);
    }
}
这里,WCF契约是iSeries设备,原始服务实现是服务类

ServiceValidationDecorator类是一个decorator,它执行自定义验证,然后将请求传递给另一个服务

现在,您需要托管ServiceValidationDecorator类,而不是托管服务类

WCF将抱怨ServiceValidationDecorator没有无参数构造函数。解决此问题的正确方法是创建自定义实例提供程序查看,然后在实例提供程序中构造ServiceValidationDecorator对象,如下所示:

new ServiceValidationDecorator(new Service())
如果您想要一个快速的解决方法来快速测试它,那么在ServiceValidationDecorator构造函数中简单地构造服务类实际上是一种糟糕的设计实践


如果您有许多服务,并且不想为每个服务创建装饰器,那么可以看看面向方面编程AOP。搜索PostSharp或DynamicProxy。

您必须这样做吗?i、 e.通过操作行为?你不能用装饰工吗?或者可能是AOP方面?我不知道这三种方式中的任何一种。请给我一个链接来阅读。