0

我有一个代理 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;
    }

当我从代理调用统计信息时,我不确定我的 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();
    }
}
4

2 回答 2

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 控制面板。单击左侧树中的“应用程序池”节点。找到您的应用程序的应用程序池并右键单击。选择“高级设置...”的菜单选项。在“流程模型”标题下,您应该具有以下设置:

最大工作进程 = 1
空闲超时 = 0

其中第一个,“最大工作进程”控制网络花园,后者只是阻止 IIS 在空闲时卸载您的应用程序。

于 2012-08-21T18:17:09.983 回答
0

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

于 2012-08-21T18:18:57.963 回答