.net 在WCF服务库项目中,在何处设置和存储应用程序状态?

.net 在WCF服务库项目中,在何处设置和存储应用程序状态?,.net,wcf,unity-container,.net,Wcf,Unity Container,我有一些东西要初始化并在整个WCF服务库中使用。如果它是在ASP.NET站点中,我会使用global.asax的Application_Start方法来实现,但是WCF服务库的等效功能是什么呢?我使用一个静态的单例,我惰性地初始化它,保存所有的应用程序状态,每次我都会感到恶心。你可以创建会话式WCF组件 请看我对这个问题的回答: 您甚至可以创建持久的会话对象,这些对象在断开与它们的连接(将其保存到文件或sql server)后仍保持其状态。朱瓦尔·洛伊(Juval Lowy)的书的第4章也详细介

我有一些东西要初始化并在整个WCF服务库中使用。如果它是在ASP.NET站点中,我会使用global.asax的Application_Start方法来实现,但是WCF服务库的等效功能是什么呢?

我使用一个静态的单例,我惰性地初始化它,保存所有的应用程序状态,每次我都会感到恶心。

你可以创建会话式WCF组件

请看我对这个问题的回答:

您甚至可以创建持久的会话对象,这些对象在断开与它们的连接(将其保存到文件或sql server)后仍保持其状态。朱瓦尔·洛伊(Juval Lowy)的书的第4章也详细介绍了这一点


这就是你想要的吗?

我现在仍然在学习WCF,但我认为最优雅的方法是定义自己的类来保存状态,并让它们实现IExtension接口

有关概述,请参阅本文:

这是一个非常巧妙的计时器:

我很确定IIS上的WCF实际上是ASP.NET的一种专门化。它并没有取代ASP.NET,而是扩展了它。因此,您的WCF服务项目还可以包括ASP.NET内容--
.aspx
.asax
文件以及
.svc
文件。因此,在WCF项目中可以直接使用
Global.asax
,并使用常规的
应用程序启动方法。值得记住的是,ASP.NET应用程序在应用程序池启动时初始化,在应用程序池停止时拆除。因此,
Application\u Start
将不会运行,直到第一个请求到达并预热应用程序池,然后如果应用程序池闲置足够长的时间,IIS将处理它,并在下一次请求进入时创建一个新的应用程序启动,获得它自己的
Application\u Start
事件

我刚刚做了一个明确的测试,可以确认
Global
的事件确实在运行<通过加载
.aspx
页面和加载元数据视图的
.svc
页面,可以触发code>应用程序启动。奇怪的是,ASP.NET创建了两个独立的
Global
实例。第一个实例只接收
应用程序启动
事件,第二个实例接收所有其他事件


如果您没有使用IIS托管WCF服务,则所有这些都不适用。

是的,这就是我目前正在做的。但这真的有什么问题吗?谢谢,但不完全是。我需要在应用程序级别而不是会话级别设置全局设置。会话也会使WCF难以测试,除非您将其抽象出来