.NET Web服务是否实例化每个方法调用?

时间:2009-07-17 16:04:05

标签: .net web-services

我正在尝试使用Web服务来实现我的想法。 在调试中运行看起来每次客户端调用Web服务中的方法时,Web服务类都会实例化。通过看到每次调用方法时都会调用构造函数,我可以看到这一点。 我只在客户端实例化一次代理Web服务。

这意味着我必须在调用之间存储所有数据,这意味着如果我使用数据库,我将不得不为每次调用方法重新连接。

那不可能是正确的?

3 个答案:

答案 0 :(得分:5)

这确实是正确的。

Web服务(在面向服务的体系结构中)意味着无状态(它们在调用之间不记得任何内容......所有数据持久性都取决于您)。

如果您在网上搜索的时间足够长,您会发现尝试创建有状态的Web服务(它确实有自己的位置,但却违背了SOA的核心原则)。但是,你会发现它们并没有减轻你的担忧。每次调用都会得到一个新的类instantianciation,并且必须重新创建与DB的任何连接。

答案 1 :(得分:3)

对于ASMX来说,它是正确的,并且在很大程度上是一件好事。服务应尽可能无状态,如果您确实需要在调用之间存储内容,则可以使用单例。但是,我不认为持有数据库连接是合格的,因为它们是缓存的,无论如何你想要使用范围。

如果您希望单个对象在两次调用之间保持活动状态,则WCF会提供此选项。鉴于ASMX已过时,您可能希望转移到WCF。

答案 2 :(得分:2)

是的,这是100%正确的。每次服务器收到请求时,都会实例化一个新对象以在单独的线程上处理请求。

这与基本的ASP.NET Web窗体相同。