将面向方面编程应用于Web服务

时间:2013-04-11 21:46:42

标签: c# .net web-services aop

我正在寻找一种将AOP概念应用于Web服务的方法。创建普通类很容易做到这一点。

示例MyClass

通常,您可以通过这种方式创建类的新实例

MyClass NewClass =  new MyClass();

要使用AOP创建此类的实例以及它周围的方面,您通常会有一个库,您可以指定类类型和要应用的方面。

示例MyClass

MyClass NewClass = MyProxyClassManager.CreateNewAOPClass(typeof(MyClass));

然而,在为Web服务附加的类尝试此操作时,这证明是具有挑战性的。 我需要一种方法,而不是返回附加到Web服务的普通类,我可以返回基于Web服务类的代理类。

BTW:我正在使用城堡项目申请AOP。 http://www.castleproject.org/projects/dynamicproxy/

1 个答案:

答案 0 :(得分:0)

我不确定您的完整技术堆栈,但使用WebAPI,您可以创建自定义DelegatingHandler来包装服务调用。有关详细信息,请参阅the official website

示例处理程序:

public class MessageHandler1 : DelegatingHandler
{
    protected async override Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request, CancellationToken cancellationToken)
    {
        Debug.WriteLine("Process request");
        // Call the inner handler.
        var response = await base.SendAsync(request, cancellationToken);
        Debug.WriteLine("Process response");
        return response;
    }
}

处理程序注册

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MessageHandlers.Add(new MessageHandler1());
        // Other code not shown...
    }
}