配置authorize属性使用的WCF服务

时间:2014-08-22 00:26:21

标签: c# wcf asp.net-web-api

我有一个自定义授权属性,如下所示:

public class AuthorizeApplicationAttribute : AuthorizeAttribute {

    private MainServiceSoapClient client;

    public AuthorizeApplicationAttribute() {
        this.client = new MainServiceSoapClient();
    }

    public AuthorizeApplicationAttribute(MainServiceSoapClient client) {
        this.client = client;
    }

    protected override bool IsAuthorized(HttpActionContext actionContext) {
        if (!base.IsAuthorized(actionContext)) return false;
        var currentUser = System.Web.Security.Membership.GetUser();
        if (currentUser == null) return false;
        var userId = (int)currentUser.ProviderUserKey;
        return client.HasPermission(userId);
    }

}

我在WebApiConfig注册为:

public class WebApiConfig {
    public static void Register(HttpConfiguration config) {

        // Web API configuration and services
        config.Filters.Add(new AuthorizeApplicationAttribute());
        // more configuration ...

    }

}

但是AuthorizeAttribute没有处置,我可以使用soap客户端实例调用构造函数,但是我不知道在哪里处置它。

仅供参考:我没有使用IoC容器。试图学习如何手动制作它。

此示例使用SoapClient,但我对DbContext有同样的问题,而我可以在不处置DbContext的情况下生活,并且不会认为不会处置WCF客户端那很好。

2 个答案:

答案 0 :(得分:1)

在IsAuthorized方法中使用using语句在需要时初始化和Dispose,而不是在构造函数中初始化。

如果您需要依赖注入,那么您可以使用Property Injection。

这个问题有Ninject和StructureMap How to use dependency injection with an attribute?

的两个答案

答案 1 :(得分:1)

此问题的解决方案可能会为您提供您想要的内容:

What is the best workaround for the WCF client `using` block issue?