ApplicationPool
下,服务已经成功地端到端地工作在 IIS 7.5
(Windows 7上)。我正在尝试让宣布的AutoStart和Preload(或“预热缓存”)功能正常工作。我非常仔细地遵循了这里和这里所介绍的指示(相似但最好有第二种意见)。这意味着我:
1)设置应用程序池的
startMode
...<applicationPools>
<!-- ... -->
<add name="HW" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
</applicationPools>
2) ...启用 serviceAutoStart
并将指针设置为我的 serviceAutoStartProvider
<site name="HW" id="2">
<application path="/" applicationPool="HW" serviceAutoStartEnabled="true" serviceAutoStartProvider="PreWarmMyCache" />
<!-- ... -->
</site>
3)...并命名该提供程序,并在其下方完整列出类的GetType().AssemblyQualifiedName
<serviceAutoStartProviders>
<add name="PreWarmMyCache" type="MyWCFServices.Preloader, HelloWorldServer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</serviceAutoStartProviders>
using System;
namespace MyWCFServices
{
public class Preloader : System.Web.Hosting.IProcessHostPreloadClient
{
public void Preload(string[] parameters)
{
System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\temp\PreloadTest.txt");
sw.WriteLine("Preload executed {0:G}", DateTime.Now);
sw.Close();
}
}
}
遗憾的是,所有这些手动配置以及一对调用都没有起到作用。任务管理器中没有w3wp.exe
进程在运行(尽管我启动HelloWorldClient时可以看到它),没有文本文件,最重要的是没有满意的结果。
关于这个功能,无论是在SO还是更广泛的网络上都缺乏讨论,这里提出的少数几个类似的问题都没有得到关注,这引起了一两个警报。也许这并不是必需的,但有没有专家曾经走过这条路愿意发表意见呢?(如果您能建议一个好的托管位置,我很乐意提供整个解决方案。)
编辑:我尝试在Preload
方法中将路径重置为相对的App_Data
文件夹(另一个SO答案建议这样做),但没有影响。此外,我了解到w3wp.exe
进程会在简单地浏览本地主机时启动。该进程消耗令人印象深刻的17MB内存来提供其单个微小的OperationContract,而价格却提供了零的预加载价值。17MB的ColdDeadCache。