在我的WCF服务启动时执行某些操作

SuB*_*SuB 5 c# wcf startup

我希望在我的WCF服务启动后做一些事情.怎么办?

事实上,我应该每10分钟更新一次我的服务变量.所以我把我的更新代码放在一个线程中.但我不知道在服务启动时如何启动此线程(在WCF服务中有什么喜欢Form_Load事件吗?)

mar*_*c_s 5

通常,你的WCF服务的任何部分都没有"只是闲逛"在内存中准备做某事...... WCF 不是 ASP.NET!

在IIS中托管时的默认设置是:

  • IIS侦听请求的特定端口/ URL - 在内存中的任何位置都没有WCF服务的单个跟踪

  • 当第一个请求进入时,IIS将启动一个ServiceHost可以"托管"服务的类

  • 然后,此服务主机将查看请求已进入,并根据目标URL,它将决定实例化哪个服务类来处理此请求.然后创建服务类(您的服务实现)并调用并执行该服务类上的相应方法,一旦完成,将处置该服务类

所以基本上,有两点你可以挂钩:

  1. 你可以创建自己的自定义ServiceHost类,它将在实例化时执行某些操作

  2. 您可以为每个服务类方法添加一些"初始化"代码来满足您的需求


The*_*ing 2

保持线程在服务器上运行是很困难的。一旦最后一个会话终止,应用程序就会关闭。一些托管提供商还会按计划回收应用程序池,这会消除保持线程运行的任何机会。

除此之外,WCF 服务实际上并未运行。它们的行为就像由请求触发的网页。添加初始化代码的明智位置是在您的Application_Startin中Global.asax。当应用程序启动时(发出第一个请求),这将被调用一次。

如果您希望对服务的每个请求执行某些操作,您Application_BeginRequest也可以在 中挂钩该事件Global.asax。