我想在整个WCF服务库中初始化和使用。如果它在ASP.NET站点中,我将在global.asax的Application_Start方法中进行,但是什么是WCF服务库的等价物?
答案 0 :(得分:3)
我使用一个静态单例,我懒惰地初始化我保持所有应用状态的地方,每次我都这样做时感觉很糟糕。
答案 1 :(得分:2)
您可以创建会话WCF组件。
请参阅我对此问题的回复:Sessionful wcf service in Silverlight
您甚至可以创建持久的会话对象,在它们断开连接后保留其状态(将其保存到文件或SQL Server)。 Juval Lowy的书的第4章也详细介绍了这一点。
这就是你要找的东西吗?
答案 2 :(得分:1)
我现在仍然在使用WCF处于学习模式,但我认为实际执行此操作的最优雅方法是定义自己的类(es)来保存状态并让它们实现IExtension接口。
请参阅此文章以获取概述: http://blogs.msdn.com/b/drnick/archive/2007/02/15/stashing-data-in-extensible-objects.aspx
这个涉及计时器的非常聪明的用法: http://social.msdn.microsoft.com/Forums/vstudio/en-US/2793580f-b91a-4d4d-b98f-b7dcab70710a/wcf-periodic-methods-call-multithread
答案 3 :(得分:0)
我很确定IIS上的WCF实际上是ASP.NET的专业化。它不会替代ASP.NET,而是对其进行了扩展。因此,您的WCF服务项目也可以包含ASP.NET内容-.aspx
文件旁边的.asax
和.svc
文件。因此,应该有可能在您的WCF项目中只使用 Global.asax
,并使用常规的Application_Start
方法。值得牢记的是,ASP.NET应用程序在应用程序池启动时初始化,在应用程序池停止时崩溃。因此,Application_Start
会在第一个请求暖到应用程序池的请求到来之前运行,然后,如果应用程序池闲置了足够长的时间,IIS将对其进行处理,并在下一个创建一个请求进入时,就会得到自己的Application_Start
事件。
我刚刚对此进行了明确的测试,可以确认Global
的事件确实在运行。通过加载Application_Start
页和加载其元数据视图的.aspx
页来触发.svc
。奇怪的是,ASP.NET创建了两个Global
的单独实例。第一个实例仅接收Application_Start
事件,而第二个实例接收所有其他事件。
如果您不使用IIS来承载WCF服务,那么这都不适用。