我正在尝试创建一个单例服务,用于处理对HttpHandler的传入请求。目前,服务正在针对每个请求进行实例化。我调用了包含服务实例的静态类,实现为单例,如下所示:
public static class ServerApplication {
static Service instance = null;
static readonly object padlock = new object();
/// <summary>
/// Service singleton.
/// </summary>
public static Service Service {
get {
lock (padlock) {
if (instance == null) {
instance = new Service();
}
return instance;
}
}
}
使用HttpHandler中的以下调用访问它:
ServerApplication.Service.Process(request);
我在instance = new Service();
行设置了一个断点,并且有多个请求
每个请求都会触发断点。
我的目标是跨请求存在的服务,因为它加载并缓存来自大多数请求重用的文件和数据库的大量数据。
有人能看出出了什么问题吗?
答案 0 :(得分:1)
HTTP旨在建立多个并发连接,我不知道你想要打破这个,除非你在页面加载上建立很少的连接。也就是说,也许你可以将HttpHandler保留在Session中?
答案 1 :(得分:1)
有几件事:
这应该涵盖并发前沿。也可能(尽管不太可能)在请求之间卸载AppDomain(即,您在Web目录中编写了一个文件,导致ASP.NET认为您的应用程序已过时),这将导致静态重置。
答案 2 :(得分:0)
一般来说,如果你想要一个单身人士 - 看不出是否必要我通常会这样实现:http://www.vikingworks.dk/page/Creating-a-Singleton-Pattern-i-C.aspx