Per testare i numerosi problemi dell'implementazione di IIS/WCF da zero, ho creato il servizio HelloWorld e il client ha attraversato (molto piacevolmente) here. Ho aggiunto endpoint per net.tcp e il servizio funziona correttamente end-to-end per entrambi i binding in IIS 7.5
(su Windows 7) nel proprio ApplicationPool
chiamato HW.Funzioni AutoStart/Pre-warm non funzionanti con IIS 7.5/servizio WCF
Quello che sto cercando di ottenere è la funzionalità AutoStart e Preload (o "pre-warm caching") annunciate. Ho seguito le istruzioni presentate here e here (abbastanza simili tra loro, ma sempre bene avere una seconda opinione) molto da vicino. Il che significa che
1) Impostare il pool di applicazioni startMode
...
<applicationPools>
<!-- ... -->
<add name="HW" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
</applicationPools>
2) ... abilitato serviceAutoStart
e impostare un puntatore alla mia serviceAutoStartProvider
<site name="HW" id="2">
<application path="/" applicationPool="HW" serviceAutoStartEnabled="true" serviceAutoStartProvider="PreWarmMyCache" />
<!-- ... -->
</site>
3) ... e chiamato il provider indicato, con il GetType().AssemblyQualifiedName
della classe elencata nella sua interezza sotto
<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();
}
}
}
Purtroppo, tutto questo la configurazione manuale, oltre a un paio di iisreset
le chiamate, e non ottengo niente. No processo w3wp.exe
sparando in Task Manager (anche se ottengo se lancio il HelloWorldClient), nessun file di testo e, soprattutto, nessuna soddisfazione.
C'è una quantità frustrante di discussione su questa funzione, sia su SO o sul web più ampio, e le poche domande simili qui hanno poca attenzione, tutte suonano un allarme o due. Forse, inutilmente, tutti gli esperti là fuori che sono stati su questa stessa strada un momento o due si preoccupano di cantare? (Felice di offrire l'intera soluzione, se si può suggerire un buon posto per ospitarlo.)
EDIT: Ho provato a ripristinare quel percorso nel metodo Preload
alla cartella relativa App_Data
(un altro SO risposta suggerita quello), non importava. Inoltre, ho appreso che il processo w3wp.exe
si attiva in una semplice ricerca sull'host locale. Il processo consuma ben 17 MB di memoria per servire il suo unico piccolo OperationContract, mentre per il prezzo offre zero valore di precarico. 17 MB di ColdDeadCache.
sono ci sono indizi nel registro eventi? Qualsiasi eccezione generata dovrebbe apparire lì. – Addys
No, niente. Non sono sicuro del motivo per cui ti aspetteresti un'eccezione, se (come già detto) il servizio funziona correttamente. – downwitch
Alcune cose che puoi controllare: - L'ID del tuo sito 2? - È corretto che il nome del tuo sito e del pool di applicazioni siano gli stessi? - Hai specificato più attributi rispetto agli esempi, solo specificando quelli negli esempi fai la differenza? –