【发布时间】:2010-09-28 22:02:14
【问题描述】:
假设我有一个简单的 WCF 应用程序,客户端调用它来获取一个数字。里面没有太多的处理,服务契约属性为SessionMode=SessionMode.NotAllowed。
什么时候调用构造函数?什么时候销毁对象?是否按请求调用构造函数?
是否有任何包含此信息的参考文档或资源?好像没找到。
【问题讨论】:
标签: wcf .net-3.5 object-lifetime
假设我有一个简单的 WCF 应用程序,客户端调用它来获取一个数字。里面没有太多的处理,服务契约属性为SessionMode=SessionMode.NotAllowed。
什么时候调用构造函数?什么时候销毁对象?是否按请求调用构造函数?
是否有任何包含此信息的参考文档或资源?好像没找到。
【问题讨论】:
标签: wcf .net-3.5 object-lifetime
WCF 由 IIS 托管,因此受制于其生命周期规则。服务类本身可能会根据需要在应用程序中创建和销毁;该类将在收到请求、调用方法和返回结果后构建,之后对象将离开作用域并被释放/完成。
但是,包含您的服务的项目对于 IIS 来说看起来像是一个普通的 ActiveServer.NET Web 应用程序(查看应该在其中的 Global.asax 文件;它包含一个 HttpApplication 类型的类,并表示IIS 可以用来控制它的应用程序),并且 IIS 将维护这些应用程序的“池”来处理来自多个客户端的请求。只要请求不断进入,并且 IIS 没有确定应用程序已经“过时”并刷新它或整个池,应用程序就会继续运行。因此,您声明的任何静态类,例如您的单例 IoC 容器,或您添加到用作子类型的派生 HttpApplication 类的任何内容,都将保留在内存中,直到应用程序被回收。
【讨论】: