1

我在我的静态助手类中创建了这些属性。

private static ServerManager IISServerManager
    {
        get
        {
            if (mIISServerManager== null)
            {
                mIISServerManager= new ServerManager();
            }

            return mIISServerManager;
        }
     }


private static SiteCollection Sites
    {
        get
        {
            try
            {
                return IISServerManager.Sites;
            }
            catch (Exception)
            {
                return null;
            }
        }
    }

当我调用 Helper 方法时

 public static bool VirtualDirectoryExists(string dirName, string siteName)
    {
        if (!String.IsNullOrEmpty(dirName) && (Sites != null))
        {
            Site site = Sites[siteName];
            ...

在使用此帮助程序的代码中(在主线程中),它会正确检索所有站点及其属性。

另一方面,当我在使用此帮助程序的代码中调用它时(在后台工作线程中)检索 SitesCollection,但代码在使用索引器 [siteName] 获取站点时冻结

Site site = Sites[siteName];

(看起来像死锁,但我这边没有锁定)

4

1 回答 1

2

该类ServerManager记录为

“不保证任何实例成员都是线程安全的”。

这通常意味着您不能从后台线程调用它们,因为无法进行任何锁定以确保 IIS 不会同时在主线程中访问数据。

只需在主线程中获取您需要的内容,缓存它,然后在后台线程中使用它。

于 2013-04-02T13:33:31.553 回答