单服务器的Web服务客户端?

时间:2009-01-30 10:54:20

标签: web-services

上周,我开始研究在Singleton上实现的Web服务客户端的现有代码。我自己从未考虑过这样做,所以我开始寻找那些对请求处理有更深入了解的人的意见,等等。我找不到一致的答案。任何有想法的人:Singleton解决方案是否存在呼叫被阻止的危险?考虑使用内存会更好吗?

2 个答案:

答案 0 :(得分:1)

这样的事情。 ASP.NET运行时的工作原理如下。

您收到了请求...让我们说这是ASP.NET应用程序收到的第一个请求。现在,根据映射,IHttpHandlers和IHttpModules会发生一些事情。

运行时将使用所需处理程序和模块的唯一实例为第一个请求提供服务。如果它是第一个请求,任何IHttpModule或你的Global.asax都有一个OnStart事件,现在甚至会触发。然后请求将被处理。伴随着所有IHttpMoudles和IHttpHandler。

现在,如果在提供第一个请求时收到第二个请求,则没有免费的IHttpHandler或IHttpModules,ASP.NET运行时会创建新的实例来为这些请求提供服务。我不是100%确定IHttpHandler和HttpModules的生命周期,但你可以在MSDN上查看。

如果您在请求期间拥有要维护的对象和事物,则应将其放入执行请求的上下文中。有几种方法可以做到这一点,但我建议你早点开始研究IHttpModules。它们非常强大。

此外,如果您继承HttpApplication类并在Global.asax文件中使用它,您将拥有由ASP.NET运行时维护的HttpApplication对象的可访问实例,并通过HttpContext类型上的ApplicationInstance属性访问

所以是的,通过汇集它通常意味着你有一堆物体围绕着。每当请求需要这种类型的实例时,它将从池中获取一个并为请求提供服务。一旦请求被服务,该对象就被返回到池中以供重用。

答案 1 :(得分:0)

作为一般规则,“单身人士”很方便,没有别的。这是不好的做法。我还没有遇到过Singleton是唯一解决方案的情况,它恰好是一个可访问的解决方案。

您使用的是哪种框架? ASP.NET?有几种方法可以挂钩到ASP.NET管道......它自己依赖于对象池来同时为请求提供服务的运行时,这对你有用吗?

我认为你最好让DBMS后端处理原子性问题。