我在静态助手类中创建了这些属性。
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];
(它看起来像死锁,但我身边没有锁定)
答案 0 :(得分:2)
ServerManager
类记录为
“不保证任何实例成员都是线程安全的”。
这通常意味着您无法从后台线程调用它们,因为无法进行任何锁定以确保IIS不会在主线程中同时访问数据。
只需在主线程中获取所需内容,将其缓存,然后在后台线程中使用它。