首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用AzMan对象的初始化方法导致FileNotFoundException

调用AzMan对象的初始化方法导致FileNotFoundException
EN

Stack Overflow用户
提问于 2011-01-20 08:37:36
回答 1查看 1.2K关注 0票数 1

我有一个WCF服务,它有一个继承System.Web.Security.RoleProvider的类。在这个类中,我使用授权管理器(AzMan) --使用AzRoles.dll --来进行角色管理。

身份验证在ADAM实例中。

我的服务在负载下一直有问题,似乎我需要更改服务,以便为每个调用打开和关闭AzMan商店-否则对象不会被释放,最终应用程序池将崩溃-至少看起来是这样-我无法确认这一点。

在原始代码中,AzMan存储是在被覆盖的Initialize方法中初始化的,如下所示:

代码语言:javascript
复制
public class AzManProvider : RoleProvider {
.
.
.
    public override void Initialize( string name, System.Collections.Specialized.NameValueCollection config ) {
                base.Initialize( name, config );
                if ( config != null ) {
                    string appName = null;
                    string connStr = null;
                    foreach ( string k in config.Keys ) {
                        string key = k.ToLower().Trim();
                        string value = config[k];
                        if ( key == "applicationName".ToLower() ) {
                            appName = value;
                        } else if ( key == "connectionStringName".ToLower() ) {
                            connStr = ConfigurationManager.ConnectionStrings[value].ConnectionString;
                        }
                    }
                    if ( connStr.IsEmpty() )
                        throw new ArgumentNullException( "connectionStringName" );
                    CurrentApplicationName = appName;
                    m_azManStore = new AzAuthorizationStoreClass();
                    try {
                        m_azManStore.Initialize( 0, connStr, null );
                    } catch ( Exception ex ) {
                        throw ex;
                    }
                }
            }
.
.
.
}

我不确定这个方法是什么时候被调用的。如果你在VS中运行它并设置一个断点,它永远不会命中。通过在部分的web.config中设置对该类的引用来实例化该类。

在做了很多研究之后,我发现了这个blog post,它建议了一种将AzMan商店包装在一次性类中的方法--非常简单。我创建了一个实现IDisposable的类:

代码语言:javascript
复制
public class AzManHelper : IDisposable
    {
        public IAzAuthorizationStore Store { get; private set; }
        public IAzApplication Application { get; private set; }

        public AzManHelper(string appName)
        {
            string connStr = ConfigurationManager.ConnectionStrings["AzMan"].ConnectionString;

            try
            {
                    this.Store = new AzAuthorizationStoreClass();
                    this.Store.Initialize(0, connStr, null);   //<-- Exception occurs here
                    this.Store.UpdateCache(null);
                    if (!String.IsNullOrEmpty(appName))
                        this.Application = this.Store.OpenApplication(appName, null);
            }
            catch (COMException cex)
            {
                HandleCOMException(cex);
            }
        }

        public void Dispose()
        {
            if (this.Application == null) 
                return;

            Marshal.FinalReleaseComObject(this.Application);

            if(this.Store != null)
                Marshal.FinalReleaseComObject(this.Store);

            this.Application = null;
            this.Store = null;
        }
}

现在,当我运行这段代码时,当AzMan存储上的Initialize方法被调用时,我会得到一个FileNotFoundException。我已经确认连接字符串是正确的。

尤其令人沮丧的是,如果我在VS2010中本地运行这段代码,它将会工作,但如果我部署它并将其作为WCF服务运行,即使userID和LDAP连接字符串是相同的,我也会得到我提到的错误。

我读了这篇blog post and posted article

然后我想,也许initialize方法是以IIS应用程序池的身份运行的,而IIS应用程序池外部的代码是以强制用户的身份运行的。因此,使用一个大学生编写的特殊类,我在调用AzMan初始化方法时关闭了模拟。我确认用户是网络服务,但我仍然得到相同的FileNotFoundException。我一直在与我们的IT人员合作,尝试不同的权限设置,但到目前为止还没有成功。

有人知道为什么我会得到这个错误吗?我应该查看哪些权限?

也许我使用AzMan的方法是错误的--我的架构有缺陷吗(除了我使用AzMan的事实之外?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-25 06:41:46

我想通了我的问题。我的WCF服务驻留在IIS中。web.config文件中有一个标记。该模拟是针对服务运行时所使用的服务帐户。当WCF服务托管在IIS中时,ASP.NET用于启动该服务,但仅此而已。因此,当应用程序启动时,AzManProvider类被ASP初始化,这样模拟就完成了。Initialize方法是在实例化该类时调用的。servcice帐户有权打开AzMan。对WCF服务的调用不使用web.config中的任何ASP条件设置。因此,服务调用在应用程序池网络服务的标识下运行。为了解决这个问题,我们将应用程序池标识更改为以服务帐户运行-并从web.config中删除了标记。现在,一切都正常了。

我不明白为什么没有安全权限会抛出FileNotFound异常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4742351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档