我的应用程序从缓存中读取DLL数据。但如果任何开发人员更改DLL,则DllCaching必须更改。所以我一直在使用FileSystemWatcher来检测DLL的任何变化。
我的系统观察器机制如下:这个项目在asp.net
public void CreateFileWatcher(string path)
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = path;
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
watcher.IncludeSubdirectories = true;
watcher.Filter = "*.dll";
// Add event handlers.
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnChanged);
// Begin watching.
watcher.EnableRaisingEvents = true;
}
private static void OnChanged(object source, FileSystemEventArgs e)
{
//FillCache
}
Button1_Click
{
CreateFileWatcher(@"C:/data")
// like that:
myarray = CachData
}
如何制作?如何在Dll更改时加载dll(再次加载)。
答案 0 :(得分:2)
如果在应用程序中使用缓存,如何清除缓存是一个障碍,当您实现清除缓存的自定义逻辑时,它变得很难。如果您使用EnterpriseLibrary缓存,我们可以在向缓存添加项目时具有依赖关系。对此文件的任何更改都将清除缓存。
以下是示例代码。同样的重载也可用于asp.net缓存。
FileDependency cacheFileDependency = new FileDependency("\\mynetworkpath\abc.txt");
cacheMgr.Add(cacheName, cacheValueList,
Microsoft.Practices.EnterpriseLibrary.Caching.CacheItemPriority.Normal,
null, cacheFileDependency);
答案 1 :(得分:-1)
我想,你不了解ASP.NET的工作方式。这是我的愿景,希望它能帮助您理解问题并找到合适的解决方案。
我在服务器端控件中实例化FileSystemWatcher,这并不意味着单实例使用,这只意味着特定客户端访问了您的Web表单或将被授予的内容(实际上并非真实)至少一个线。这也意味着IIS线程的数量可能少于客户端所需的数量。
此外,这也意味着您无法有效地使用Singleton模式,以及会话存储或cookie(在Web-farm异步调用的情况下,它将违反法律)。
唯一真正有效的选择是实现Web服务,并累积对指定服务器路径(不是物理路径,而是IIS(或任何Web服务器,fe mono)路径)的更改,删除或添加,即\ etc \ bin \ dlls \,可以使用http utils BCL课程有效地转换为物理服务器路径,并定期获取所需信息。
如果您愿意直接获取无法获得的此类信息,因为在监视实例之间始终存在间隙,此文件夹将处于不受控制状态,即f.e。一个客户端线程正在关闭,并且在下一个客户端连接到服务器之前,例如当用户在页面上上传一个大文件,然后调用F5或刷新页面,但页面进入过期状态(过期状态意味着) ,客户端页面的有意义状态丢失,可能是服务器上的客户端消费者线程已完成其工作,或者转到队列中的下一个客户端。