我正在尝试使用Web服务来实现我的想法。 在调试中运行看起来每次客户端调用Web服务中的方法时,Web服务类都会实例化。通过看到每次调用方法时都会调用构造函数,我可以看到这一点。 我只在客户端实例化一次代理Web服务。
这意味着我必须在调用之间存储所有数据,这意味着如果我使用数据库,我将不得不为每次调用方法重新连接。
那不可能是正确的?
答案 0 :(得分:5)
这确实是正确的。
Web服务(在面向服务的体系结构中)意味着无状态(它们在调用之间不记得任何内容......所有数据持久性都取决于您)。
如果您在网上搜索的时间足够长,您会发现尝试创建有状态的Web服务(它确实有自己的位置,但却违背了SOA的核心原则)。但是,你会发现它们并没有减轻你的担忧。每次调用都会得到一个新的类instantianciation,并且必须重新创建与DB的任何连接。
答案 1 :(得分:3)
对于ASMX来说,它是正确的,并且在很大程度上是一件好事。服务应尽可能无状态,如果您确实需要在调用之间存储内容,则可以使用单例。但是,我不认为持有数据库连接是合格的,因为它们是缓存的,无论如何你想要使用范围。
如果您希望单个对象在两次调用之间保持活动状态,则WCF会提供此选项。鉴于ASMX已过时,您可能希望转移到WCF。
答案 2 :(得分:2)
是的,这是100%正确的。每次服务器收到请求时,都会实例化一个新对象以在单独的线程上处理请求。
这与基本的ASP.NET Web窗体相同。