【发布时间】:2011-06-09 17:02:57
【问题描述】:
这是我的场景。
我有一个包含 3 个项目的 ASP.NET MVC 解决方案。数据、Web 和 Windows 服务。数据层具有静态(非线程安全)属性,一旦存储在静态私有字段中就可以获取数据。见下文:
private static int? _userCount;
public static int UserCount
{
get
{
if (!_userCount.HasValue)
{
_userCount = GetUserCount();
}
return _userCount.Value;
}
set
{
_userCount = value;
}
}
这非常适合我的需求。在 Web 层中,每当添加新用户并设置 UserCount = NULL 时,我都会在数据层中调用 Service 方法,因此下次站点受到点击时,它将获取新的计数。这也按预期工作。
我还有一个 Windows 服务,它可以通过导入过程创建用户。它调用了与 Web 层相同的 SaveUser 方法,该方法再次应取消 UserCount 属性。然后我想我应该能够在网站上刷新页面并让它再次获得新的用户数。然而,这种情况并非如此。
我可以单步执行代码并看到服务点击了UserCount = NULL,但它就像 Web 层无法识别它,即使它正在调用相同的属性。
我必须在 Windows 服务引入用户的任何时候进行 IIS 重置,以清除静态属性。关于为什么在服务中创建用户与通过 UI 在 Web 层上创建用户的行为会有所不同的任何想法?
【问题讨论】:
标签: c# asp.net windows-services static