【问题标题】:Dispose WCF service used by authorize attribute释放授权属性使用的 WCF 服务
【发布时间】:2014-08-22 00:26:21
【问题描述】:

我有一个这样的自定义授权属性:

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没有dispose,我可以用soap客户端实例调用构造函数,但是我不确定在哪里dispose。

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

此示例使用 SoapClient,但我对 DbContext 也有同样的问题,而我可以不处理 DbContext 并且不认为不处理 WCF 客户端会那么好。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 使用不是处置 wcf 客户端的有效方式,因为它可能以故障状态结束。在这种情况下如何使用属性注入?你能提供和例子吗?
    【解决方案2】:

    这个问题的解决方案可能会给你你想要的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      相关资源
      最近更新 更多