Aby przetestować wiele problemów związanych z implementacją IIS/WCF od zera, zbudowałem usługę HelloWorld i klient przeszedł (bardzo ładnie) here. Dodałem punkty końcowe dla net.tcp, a usługa działa poprawnie od końca do końca dla obu wiązań pod numerem IIS 7.5
(w systemie Windows 7) we własnym ApplicationPool
nazywanym HW.Funkcje AutoStart/Pre-warm nie działające w usługach IIS 7.5/WCF
To, co próbuję uzyskać, to zapowiedziane funkcje AutoStart i Preload (lub "pre-warm caching"). Postępowałem zgodnie z instrukcjami podanymi here i here (dość podobnymi do siebie, ale zawsze dobrze mieć drugą opinię) bardzo uważnie. Co oznacza, że
1) Ustaw pulę aplikacji startMode
...
<applicationPools>
<!-- ... -->
<add name="HW" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
</applicationPools>
2) ... włączony serviceAutoStart
i ustawić wskaźnik do moich serviceAutoStartProvider
<site name="HW" id="2">
<application path="/" applicationPool="HW" serviceAutoStartEnabled="true" serviceAutoStartProvider="PreWarmMyCache" />
<!-- ... -->
</site>
3) ... i nazwano wspomnianego dostawcę, z GetType().AssemblyQualifiedName
klasy wymienionej w całości poniżej
<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();
}
}
}
Niestety, cała ta konfiguracja ręczna, plus kilka iisreset
rozmowy, a ja nic. No w3wp.exe
proces rozpalania w Menedżerze zadań (chociaż otrzymam go, gdy uruchomię HelloWorldClient), bez pliku tekstowego, a przede wszystkim bez satysfakcji.
Dyskusja na temat tej funkcji jest frustrująco niska, zarówno na SO, jak i na szerszą sieć, a kilka podobnych pytań nie ma zbyt wiele uwagi, a wszystkie dzwonki alarmowe lub dwa. Być może jednak niepotrzebnie - czy ci eksperci, którzy byli na tej drodze, dbają o to, by zadzwonić? (Chętnie oferują całą rozwiązanie jeśli można zasugerować dobre miejsce, aby go gościć.)
EDIT: Próbowałem zresetowanie tej ścieżki w metodzie Preload
do względnego folderze App_Data
(inny SO odpowiedź sugeruje to), nie miało znaczenia. Nauczyłem się również pożarów procesów w3wp.exe
na prostym przejściu do hosta lokalnego. Proces zużywa imponujące 17 MB pamięci, aby obsłużyć pojedynczą niewielką operację OperationContract, a przy cenie oferującej zerową wartość wstępnego ładowania. 17 MB pamięci ColdDeadCache.
są istnieją jakieś wskazówki w dzienniku zdarzeń? Wszelkie zgłaszane wyjątki powinny się tam pojawić. – Addys
Nie, nic. Nie wiem, dlaczego spodziewałbyś się wyjątku, jeśli (jak podano) usługa działa poprawnie. – downwitch
Kilka rzeczy, które możesz sprawdzić: - Czy identyfikator Twojej witryny 2? - Czy to prawda, że nazwa Twojej witryny i puli aplikacji jest taka sama? - Podałeś więcej atrybutów niż w przykładach, czy właśnie te w przykładach robią różnicę? –