刷新缓存而不重新启动主机实例

时间:2015-01-17 06:13:58

标签: biztalk biztalk-orchestrations biztalk-deployment

我们在所有biztalk应用程序中使用进程内.net内存缓存,现在如果我们突然需要使缓存无效,我们唯一的选择是重新启动主机实例。

是否有其他选项可以在不重新启动主机实例的情况下使inproc .net缓存失效?

5 个答案:

答案 0 :(得分:1)

我认为没有其他选择。我假设您已经在使用缓存到期时间。如果不使用它。即使缓存过期,它也会在一段固定时间后过期。如果您经常需要立即刷新缓存,则不要使用Cache或查看SqlDependency .net类以在数据更改时在应用程序中接收事件。您可以在msdn

上查找SqlDependency详细信息

答案 1 :(得分:1)

确定,但它必须是你自己实现的东西。记住,你可以编写你想要的任何东西。

假设您正在使用静态类,它可以实现注册表监视器(例如:http://www.codeproject.com/Articles/4502/RegistryMonitor-a-NET-wrapper-class-for-RegNotifyC)来接收通知。然后有一个设置标志的小工具。设置标志后,缓存会刷新。

答案 2 :(得分:0)

默认情况下,主机配置刷新间隔为60秒。因此,您可以等待60秒以使缓存自动刷新,或者您可以重新启动主机实例。

答案 3 :(得分:0)

您使用的是哪种缓存,失效原因是什么?我的意思是,在知道缓存失效的时候,你怎么知道(或应用程序知道怎么知道?)

现在,您似乎是手动执行此操作,在这种情况下,我可以认为您的应用程序中有一个端点,该端点由添加缓存失效代码的同一主机实例处理。

答案 4 :(得分:0)

我实际上做了同样的事情。只需从托管缓存的任何应用程序中公开WCF端点,并编写一个更新缓存中对象的方法 - 不确定用例是什么,但要注意并发和锁定,除非您将对象的副本返回到使用缓存的biztalk应用程序然后你就可以了。

然后编写一个webform或通过WCF调用该方法的东西。我的缓存存在于BT应用层上,因此我能够使用namedpipes获得最高吞吐量,但会针对您的用例进行一些研究。