Для тестирования многих головных проблем реализации IIS/WCF с нуля я создал службу HelloWorld, и клиент прошел (очень красиво) здесь. Я добавил конечные точки для net.tcp, и служба работает нормально для обоих привязок в IIS 7.5
(в Windows 7) в своем собственном ApplicationPool
под названием HW.
То, что я пытаюсь получить, - это объявленные функции AutoStart и Preload (или "pre-warm caching" ). Я следил за инструкциями здесь и здесь (очень похожи друг на друга, но всегда хорошо имеют второе мнение) очень тесно. Это означает, что я
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();
}
}
}
Увы, вся эта ручная конфигурация плюс пара iisreset
вызывает, и я ничего не получаю. Нет процесса w3wp.exe
, запускающегося в диспетчере задач (хотя я получаю его, если я запускаю HelloWorldClient), никакого текстового файла и, прежде всего, никакого удовлетворения.
Существует разочаровывающее количество обсуждений этой функции, как на SO, так и в более широкой сети, и несколько подобных вопросов здесь мало привлекают внимание, все из которых звонят в колокольчик или два. Может быть, бесполезно, хотя - какие-то эксперты, которые были на этом самом пути, время или два, чтобы перезвонить? (Счастлив предложить все решение, если вы можете предложить хорошее место для его размещения.)
EDIT: я попытался сбросить этот путь в методе Preload
в относительную папку App_Data
(другой ответ, предложенный SO), не имеет значения. Кроме того, я узнал, что процесс w3wp.exe
запускается при простом просмотре на localhost. Этот процесс потребляет впечатляющую 17 МБ памяти, чтобы обслуживать свой единственный крошечный OperationContract, в то время как цена предлагала нулевое значение Preload. 17MB ColdDeadCache.