如何跨多个工作进程维护 System.Web.Caching.cache?

问题描述

我使用的 FluorineFX 似乎没有人再支持了,我将 iis 服务器会话状态从 inProc 切换到状态服务器(网络农场),一切正常,直到我将工作进程从 1 增加到 > 1。当我做系统的一个消息传递部分(RTMP)有问题。它似乎没有产生任何错误,但是消息似乎并没有在机器之间产生。

我有 FluorineFX 的来源,我相信我发现了问题。它似乎使用 System.Web.Caching.cache 来存储要发送给客户端的消息。虽然我还没有最终证明这是问题所在,但我相信当我切换到多个工作进程时,缓存不会在它们之间共享。

我的前端是 AIR。我有点不利,因为我用 VB 而不是 C# 编写我的中间层,而 FluorineFX 是用 C# 编写的。

我认为处理存储和检索数据的 FluorineFX 中的代码似乎是;

using System.Web.Caching;
using FluorineFx.Collections;

namespace FluorineFx.Context
{
    class ApplicationState : IApplicationState
    {
        IResource _resource;

        public ApplicationState()
        {
            _resource = new FileSystemResource("~/Web.config");
            if (_resource == null || !_resource.Exists)
                _resource = new FileSystemResource("~/web.config");
        }

        #region IApplicationState Members

        public object this[string name]
        {
            get
            {
                return httpruntime.cache[name];
            }
            set
            {
                Add(name,value);
            }
        }

        public void Remove(string key)
        {
            httpruntime.cache.Remove(key);
        }

        public void Add(string name,object value)
        {
            //Cache can be cleared by touching Web.config
            if (_resource != null && _resource.Exists)
            {
                CacheDependency cacheDependency = new CacheDependency(_resource.File.FullName);
                httpruntime.cache.Insert(name,value,cacheDependency,DateTime.Now.AddYears(1),TimeSpan.Zero,CacheItemPriority.NotRemovable,null);
                return;
            }
        }

        /// <summary>
        /// Locks access to an IApplicationState variable to facilitate access synchronization.
        /// </summary>
        public void Lock()
        {
            //System.Web.Caching.Cache is thread-safe
        }
        /// <summary>
        /// Unlocks access to an IApplicationState variable to facilitate access synchronization.
        /// </summary>
        public void UnLock()
        {
            //System.Web.Caching.Cache is thread-safe
        }

        #endregion

        #region IEnumerable Members

        public IEnumerator GetEnumerator()
        {
            return httpruntime.cache.GetEnumerator();
        }

        #endregion
    }
}

web.config 或 IIS 中的配置更改是否会导致缓存在工作进程之间共享?

或者是否有其他原因可能导致这些症状?

编辑:

我想第一个问题是,“缓存存储在哪里?”我想它会与应用程序变量保存在同一个地方,我认为是会话状态服务器。

不知道 System.Web.Caching.cache,我的应用程序使用应用程序变量来缓存数据。存储在那里的数据适用于单个或多个工作进程。

一个问题是“我可以将此代码切换为使用 ASP.NET '应用程序变量'吗?”

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)