我们在所有 biztalk 应用程序中使用进程内 .net 内存缓存,现在如果我们突然需要使缓存无效,我们唯一的选择就是重新启动主机实例。
是否有其他选项可以在不重新启动主机实例的情况下使 inproc .net 缓存无效?
我们在所有 biztalk 应用程序中使用进程内 .net 内存缓存,现在如果我们突然需要使缓存无效,我们唯一的选择就是重新启动主机实例。
是否有其他选项可以在不重新启动主机实例的情况下使 inproc .net 缓存无效?
我认为没有其他选择。我假设您已经在使用缓存到期时间。如果不使用它。即使缓存过期,它也只会在某个固定时间后过期。如果您经常需要立即刷新缓存,那么要么不使用缓存,要么查看 SqlDependency .net 类以在数据更改时在您的应用程序中接收事件。您可以在 msdn 上查找 SqlDependency 详细信息
当然可以,但它必须是你自己实现的东西。请记住,您可以编写任何您想要的程序。
假设您使用的是静态类,它可以实现一个注册表观察器(例如: http: //www.codeproject.com/Articles/4502/RegistryMonitor-a-NET-wrapper-class-for-RegNotifyC)来接收通知。然后有一个设置标志的小工具。设置标志时,缓存刷新。
默认情况下,主机配置刷新间隔为 60 秒。因此,您可以等待 60 秒以自动刷新缓存,也可以重新启动主机实例。
您使用的是哪种缓存,失效原因是什么?我的意思是,您怎么知道(或应用程序如何知道)何时使缓存失效?
现在,您似乎正在手动执行此操作,在这种情况下,我可以认为您的应用程序中有一个端点,该端点由您添加缓存失效代码的同一主机实例处理。
我实际上做了同样的事情。只需从托管缓存的任何应用程序公开 WCF 端点并编写一个更新缓存中对象的方法 - 不确定用例是什么,但要小心并发和锁定,除非您将对象的副本返回到使用缓存的 biztalk 应用程序就可以了。
然后编写一个 webform 或通过 WCF 调用该方法的东西。我的缓存位于 BT 应用程序层,因此我能够使用命名管道获得最高吞吐量,但对您的用例进行一些研究。