公共静态词典不保留价值

时间:2012-08-21 18:04:05

标签: c# wcf

我有一个代理WCF服务,它驻留在客户端的IIS中,并调用外部WCF服务(由Windows服务调用)。当从windows服务收集统计信息时,它们将存储在以下m_statList字典中。

public static Dictionary<int, LinkedList<StatValue>> m_statList = new Dictionary<int,    LinkedList<StatValue>>();
public static Dictionary<int, LinkedList<StatValue>> Stats
{
    get
    {
        return m_statList;
    }
}

m_statList在服务运行时保留值,但是一旦代理使m_statList中的调用将计数设置为零。

以下是我如何通过内部代理服务进行呼叫:

public Dictionary<int, List<StatValue>> GetStats(DateTime getFromDate, List<int> getValueList)
    {
        Dictionary<int, List<StatValue>> returnList = new Dictionary<int, List<StatValue>>();

        foreach (var stat in DashboardCollectorService.Stats.Where(k => getValueList.Contains(k.Key)))
        {
            returnList.Add(stat.Key, stat.Value.Where(s => s.StatDateTime > getFromDate).ToList<StatValue>());
        }

        return returnList;
    }

当我从代理服务器调用stats时,我不确定我的m_statList是否为空。

public class DashboardProxyService : IDashboardWCFService
{
    DashboardWCFService buffer = new DashboardWCFService();

    Dictionary<int, List<StatValue>> IDashboardWCFService.GetStats(DateTime getFromDate, List<int> getValueList)
    {
        return buffer.GetStats(getFromDate, getValueList);
    }

    List<StatType> IDashboardWCFService.GetStatTypes()
    {
        return buffer.GetStatTypes();
    }
}

2 个答案:

答案 0 :(得分:0)

您是否已禁用应用程序池的IIS Web园?

对于IIS 6,请参阅http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/659f2e2c-a58b-4770-833b-df96cabe569e.mspx?mfr=true

对于IIS 7,打开IIS控制面板。单击左侧树中的“应用程序池”节点。找到应用程序的应用程序池,然后单击鼠标右键。选择“高级设置...”的菜单选项。在“流程模型”标题下,您应该具有以下设置:

Maximum Worker Processes = 1
Idle Time-out = 0

其中第一个“最大工作进程”控制Web园,后者只是让IIS在空闲时不会卸载您的应用程序。

答案 1 :(得分:0)

静态数据一直持续到AppDomain。默认情况下,IIS可以重新启动应用程序池,并卸载AppDomain。因此,下次调用IIS托管服务时,会有另一个域。