Ich habe eine einfache App, wo ich global.asax verwenden, um eine Serviceroute zu einem WCF-Dienst über eine benutzerdefinierte Servicehostfactory in Application_Start zuzuordnen. Der Konstruktor dieses Dienstes führt eine anfängliche Verarbeitung durch, um den Dienst einzurichten, der ein wenig Zeit benötigt.Wie erhalte ich einen Dienst, um von global.asax zu starten, ohne ihn aufzurufen?
Ich brauche diesen Konstruktor zu feuern, wenn seine serviceroute automatisch hinzugefügt wird. Ich habe versucht, einen Clientchannel von global.asax zu erstellen und einen Dummy-Aufruf zu machen, um den Dienst hochzufahren, aber ich habe festgestellt, dass der Dienst noch nicht verfügbar ist - es scheint, dass application_start zurückkehren muss.
Also wie bekomme ich den Konstruktor des Dienstes zu feuern, wenn zuerst über global.asax zugeordnet, ohne den Dienst manuell zu treffen? Leider ist AppFabric keine Option für uns, so kann ich nicht einfach zu verwenden, ist es Einbau-Autostart ..
UPDATE
ich für ein bisschen mehr Detail gefragt wurde;
Dies ist wie ein Routing-Verwaltungsdienst. Also habe ich Service1 - es wird als Serviceroute in global.asax hinzugefügt. Jetzt habe ich http://localhost/Service1
Inside Service1 Ich habe eine Methode namens 'addServiceRoute'. Wenn es aufgerufen wird, registriert es auch eine Route für Service2. Jetzt habe ich http://localhost/Service1/Service2.
Meine erste Lösung von global.asax war, eine Channelfactory zu http://localhost/service1 zu bauen, aber das würde nicht funktionieren. Service1 war noch nicht verfügbar und würde nicht kommen, bis Application_Start zurückgegeben wurde (Sie wissen immer noch nicht warum?). Also dachte ich, ich würde diesen initialen addserviceroute-Aufruf an den Konstruktor von service1 schummeln und verschieben. Hat auch nicht funktioniert.
Es wurde erwähnt, dass dies nicht im Konstruktor sein sollte - ich stimme zu, das ist nur Code testen.
Ein Singleton wurde ebenfalls erwähnt, was vielleicht in Ordnung ist, aber ich beabsichtige, mehr als eine Instanz von Service1 auf einer Maschine (im selben App-Pool) zu haben, also glaube ich nicht, dass das funktionieren wird?
** UPDATE # 2 ** Ich war für Beispielcode gefragt .. hier ist es von global.asax (ein wenig der Kürze halber getrimmt) .. So http://localhost/Test DOES kommen .. Aber wenn ich AppFabric verwenden um Test zu erwärmen und seinen Konstruktor zum feuern zu bringen, dann brauche ich nicht Test.svc oder etwas? Wie kann ich feststellen, ob dieser Service überhaupt existiert?
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");
RouteTable.Routes.Add(
new ServiceRoute("Test", new MyServiceHostFactory(ITestService, BindingType.BasicHttpBinding, true), TestService));
}
Wenn Sie ein wenig mehr Informationen hinzufügen könnten, denke ich, dass ich Ihnen helfen kann. Möchten Sie beim Start Ihres Anwendungspools eine WCF-Methode aufrufen? Was hat AppFabric damit zu tun, verwenden Sie dies für eine Art Caching? –
Aktualisierung im Artikel mit Detail – XeroxDucati
AppFabric hat damit zu tun, dass AppFabric mehr ist als Caching, es hilft auch, WCF-Dienste zu verwalten. Informationen zu Auto-Start finden Sie unter http://msdn.microsoft.com/en-us/library/ee677285.aspx. – Rich