在WCF服务库项目中设置和存储应用程序状态的位置?

问题描述 投票:4回答:4

我想在整个WCF服务库中初始化和使用。如果它在ASP.NET站点中,我将在global.asax的Application_Start方法中执行它,但是什么是WCF服务库的等价物?

.net wcf unity-container
4个回答
3
投票

我使用一个静态单例,我懒惰初始化我持有所有应用程序状态,每次我都这样做时感觉很糟糕。


2
投票

您可以创建会话WCF组件。

请参阅我对此问题的回答:Sessionful wcf service in Silverlight

您甚至可以创建持久的会话对象,在它们断开连接后保留其状态(将其保存到文件或SQL Server)。 Juval Lowy的书的第4章也详细介绍了这一点。

那是你要找的那种吗?


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


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服务,则这些都不适用。

© www.soinside.com 2019 - 2024. All rights reserved.