我想使用自动启动工具来确保我的应用程序缓存始终被填充并准备就绪,如ScottGu 的博客中所述。我在配置它时遇到了一些问题。
该项目的工作名称为 IceCream,我使用的是 Windows 7、IIS 7.5、ASP.NET 4.5。
在 IIS 中,我创建了一个新的应用程序池,IceCreamPool
并且我已applicationHost.config
按照博文中的详细说明进行了修改。
首先:我在应用程序池中添加startMode
了:AlwaysRunning
<applicationPools>
...
<add name="IceCreamPool" autoStart="true" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
...
</applicationPools>
接下来,我在应用程序中添加了serviceAutoStartEnabled
和serviceAutoStartProvider
:
<application path="/IceCreamCMS" applicationPool="IceCreamPool">
<virtualDirectory path="/" physicalPath="C:\Projects\IceCreamCMS\IceCreamCMS" serviceAutoStartEnabled="true" serviceAutoStartProvider="PreWarmMyCache" />
</application>
<sites>
然后我在元素之后添加了服务自动启动提供程序:
<sites>
...
</sites>
<serviceAutoStartProviders>
<add name="PreWarmMyCache" type="IceCreamCMS.PreWarmCache, IceCreamCMS" />
</serviceAutoStartProviders>
在应用程序中IceCreamCMS
,我创建了PreWarmCache
如下调用的类:
using System.Net.Mail;
public class PreWarmCache : System.Web.Hosting.IProcessHostPreloadClient
{
public void Preload(string[] parameters)
{
// Perform initialisation and cache loading logic right here
SmtpClient s = new SmtpClient("webmail.example.com");
s.Send("website@example.com", "me@example.com", "Pre-warming the cache", "Hello there...");
}
}
然后我重建了应用程序,但没有收到任何电子邮件。
我执行了一个iisreset
看看我是否收到了一封电子邮件,但是iisreset
给了我一个错误:
应用程序池 'IceCreamPool' 的工作进程遇到错误 'Configuration file is not well-formed XML' 试图从文件 '\?\C:\inetpub\temp\apppools\IceCreamPool\IceCreamPool.config' 读取配置数据,行数字“3”。数据字段包含错误代码。
肯定applicationHost.config
是格式正确的,我没有打出基本的错字,我通过一个 XML 验证器运行它来确认。所以,下一个明显的地方是它在错误中声明的配置文件,但它不存在,所以我猜因为它在 \temp\ 它不会停留足够长的时间让我看在。
我知道我的 C# 位或我如何配置 serviceAutoStartProviders 存在问题,因为如果我删除该serviceAutoStartProviders
部分并从<application>
元素中删除设置,只留下startMode="AlwaysRunning"
应用程序池上的设置,那么我不会遇到任何问题。
所以 - 有什么想法吗?你如何将你的班级与serviceAutoStartProvider
? 我试过让我的类没有命名空间,一个命名空间是应用程序的名称(IceCreamCMS
)和一个更长的命名空间;一切都无济于事。
如果有人真的让这个工作,你能分享你的配置和 C# 代码吗?令人沮丧的是,原始博客文章没有给出最终的工作示例!