AutoStart/Pre-warm-features in IIS 7.5 / WCF-Dienst
Für die Prüfung der vielen Kopfschmerzen IIS/WCF-Implementierung von Grund auf, baute ich die HelloWorld-service-und client liefen durch (sehr schön) hier. Ich fügte hinzu, Endpunkte für Netto.tcp, und der Dienst einwandfrei funktioniert Ende-zu-Ende-für beide Bindungen unter IIS 7.5
(auf Windows 7) in seiner eigenen ApplicationPool
namens HW.
Was ich versuche zu bekommen, arbeiten ist angesagt AutoStart und Vorspannung (oder "pre-warm-caching") Merkmale. Ich habe die Anweisungen befolgt gelegt hier und hier (ziemlich ähnlich zu einem anderen, aber immer gut, eine zweite Meinung) sehr eng. Was bedeutet, dass ich
1) Legen Sie den Anwendungspool startMode
...
<applicationPools>
<!-- ... -->
<add name="HW" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
</applicationPools>
2) ...aktiviert serviceAutoStart
und setzen Sie einen Zeiger auf meine serviceAutoStartProvider
<site name="HW" id="2">
<application path="/" applicationPool="HW" serviceAutoStartEnabled="true" serviceAutoStartProvider="PreWarmMyCache" />
<!-- ... -->
</site>
3) ...und mit Namen sagte-Anbieter, mit der GetType().AssemblyQualifiedName
von der Klasse aufgeführt, die in Ihrer Gesamtheit unter
<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();
}
}
}
Ach, alle diese manuelle Konfiguration, plus ein paar iisreset
Anrufe, und ich bekomme nichts. Keine w3wp.exe
Prozess anheizen, die im Task-Manager (wenn ich es bekomme, wenn ich starten Sie die HelloWorldClient), keine text-Datei, und vor allem, keine Zufriedenheit.
Es ist frustrierend geringen Menge der Diskussion über diese Funktion, entweder auf SO oder die breitere web, und die paar ähnliche Fragen hier bekam wenig Aufmerksamkeit, alle, die Ringen eine alarm Glocke oder zwei. Vielleicht unnötig aber-keine Experten da draußen, die sich dieser Straße eine Zeit oder zwei Pflege zu läuten? (Gerne bieten bis die gesamte Lösung, wenn Sie können schlagen ein guter Ort, um host-it.)
BEARBEITEN: ich habe versucht, zurücksetzen, dass der Pfad in der Preload
Methode, um die relative App_Data
Ordner (eine andere Antwort vorgeschlagen, dass), egal. Auch habe ich gelernt, die w3wp.exe
Prozess feuert auf ein einfaches navigieren Sie zu dem "localhost". Der Prozess verbraucht eine beeindruckende 17MB Speicher zu dienen, bis seine einzigen winzigen OperationContract, während es für den Preis anbietet null Vorspannung Wert. 17MB von ColdDeadCache.
- gibt es irgendwelche Hinweise im Ereignisprotokoll? Alle Ausnahmen sollten dort auftauchen.
- Nein, nichts. Nicht sicher, warum Sie erwarten würden, eine Ausnahme, wenn (wie gesagt) der service funktioniert gut.
- Ein paar Dinge, die Sie könnte prüfen: - Ist die id Ihrer site 2? - Ist es korrekt, dass Sie den Namen Ihrer Website und den Anwendungspool identisch sind? - Sie haben angegeben, mehr Attribute als die Beispiele, nicht nur die Angabe der in den Beispielen einen Unterschied machen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein etwas anderer Ansatz für dein problem:
Re 1: Die AutoStart-Funktion von Appfabric sollte einfach funktionieren out of the box (sofern Sie nicht mithilfe von MVC die ServiceRoute zu registrieren, Ihre Dienste, Sie MÜSSEN angegeben werden, entweder in der Web.config ' s
serviceActivations
Abschnitt oder mit physikalischen*.svc
- Dateien.Re 2: injizieren benutzerdefinierten Start-code in der WCF-pipeline könnten Sie ein Attribut verwenden, wie diese:
..das kann z.B. so verwendet werden:
Das ist der exakte Ansatz, den wir verwendet haben für eine Weile, und auf eine Vielzahl von Dienstleistungen. Der zusätzliche Vorteil der Verwendung eines WCF
ServiceBehavior
für benutzerdefinierte startup-code (im Gegensatz zu unter Berufung auf die IIS-Infrastruktur) ist, dass es funktioniert in jedem hosting-Umgebung (inkl. self-hosted) und können einfacher getestet.Ich weiß, das klingt absurd, aber ich Stand vor dem gleichen Problem (w3wp.exe nicht feuern automatisch, nachdem Sie die config-änderungen), und es war, weil ich gar nicht der text-editor im Admin-Modus, wenn ich war die Bearbeitung der applicationHost.config-Datei. Blöder Fehler meinerseits.
In meiner Verteidigung war ich mit Notepad++ die mir gesagt, es war sparen, wenn es eigentlich nicht war.
Habe ich das gleiche getan. es funktioniert...
In der preload-Methode habe ich einige code kopiert, von einem schönen weißen Papier hier!
Preload-Methode sieht wie...
Vielleicht sind Sie auf einem 64-bit system? Es ist eine bekannte "feature" in Windows, wo das sparen wird umgeleitet, um die 32-bit-Ordner und somit auch keine änderungen abgeholt werden
(Ich habe Umgerechnet meine Kommentar zu einer Antwort zu Antworten, die vielleicht leichter zu finden)