是否有可能在某人连接之前在WCF服务中执行启动代码?

本文关键字:执行 启动 代码 服务 某人 有可能 连接 是否 WCF | 更新日期: 2023-09-27 18:05:01

是否有一种方法可以使初始化代码在网站与Web服务启动或应用程序池回收时运行?代码应该在有人尝试连接到服务之前运行。我以为Application_Start是全球的。Asax应该可以工作,但是它也只在第一个客户端连接时调用。或者至少像"CronJob"这样的东西,每次回收应用程序池时运行一次,并调用一次Web服务。

Update:应该在启动时立即执行(启动IIS站点或回收App Pool)。因为我有一些时间密集的静态初始化代码,所以连接的第一个客户机在调用返回之前有很长的等待时间。我希望防止这种情况发生,因为每次此服务的应用程序池被回收时都会发生这种情况。

是否有可能在某人连接之前在WCF服务中执行启动代码?

Windows Server 2008及以上版本的IIS 7.5支持应用程序池预热:

IIS应用程序池预热特性。此功能由一个HTTP请求,并打算在大多数ASP中使用。网络应用程序。为了执行应用程序预热,IIS启动一个工作进程,然后预加载CLR和任何所需的程序集。接下来,它使用HTTP请求模拟器来模拟真实的请求,这将触发剩余的请求启动任务,如编译和缓存页面,以及创建数据库连接。要使用这种方法,请编写自定义启动代码在Global.asax中的Application_Start方法中。然后配置IIS应用程序预热(在applicationHost。配置文件)中的URL应用程序。有关如何配置IIS的信息应用程序预热,参见配置路径。

。Net 4.0及以上版本支持ASP。Net预加载管理器:

在。net Framework 4中,ASP。NET支持自定义应用程序预加载特性。此特性可以通过HTTP或非HTTP激活请求,它为您提供了对所有预加载任务的编程控制。这种方法适用于相对复杂的服务器应用程序应用程序需要独立于协议的机制的场景以便执行自定义预加载任务。一个这样的例子应用程序是Windows通信基础(WCF)。要使用ASP。. NET应用程序预加载管理器,您编写一个托管类型包含预加载代码。类型必须实现IProcessHostPreloadClient接口。然后配置自定义类型作为IIS配置中的预加载提供程序类型applicationHost。配置文件。

Application_Start是添加代码的正确位置,但是您必须更改应用程序池的设置。通常,IIS只在发出第一个请求时启动应用程序池和网站。这可以通过IIS 7.5中的AlwaysRunning选项进行更改。

In C:'Windows'System32'inetsrv'config'applicationHost.config:

<applicationPools> 
  <add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" /> 
</applicationPools>

http://msdn.microsoft.com/en-us/library/ee677260 (v = azure.10) . aspx