我有一个代理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();
}
}
答案 0 :(得分:0)
您是否已禁用应用程序池的IIS Web园?
对于IIS 7,打开IIS控制面板。单击左侧树中的“应用程序池”节点。找到应用程序的应用程序池,然后单击鼠标右键。选择“高级设置...”的菜单选项。在“流程模型”标题下,您应该具有以下设置:
Maximum Worker Processes = 1 Idle Time-out = 0
其中第一个“最大工作进程”控制Web园,后者只是让IIS在空闲时不会卸载您的应用程序。
答案 1 :(得分:0)
静态数据一直持续到AppDomain
。默认情况下,IIS可以重新启动应用程序池,并卸载AppDomain
。因此,下次调用IIS托管服务时,会有另一个域。