2009-07-09 12 views
0

ich eine Klassenbibliothek erstellt haben genannt AddServiceLibrary, in denen ich eine Methode AssemblyLoader Code aufgerufen ist unten:keine Verbindung hergestellt werden konnte, weil die Zielmaschine aktiv verweigert es in WCF prob

string executingAssemblyName = Application.ExecutablePath; 
     AssemblyName asmName = AssemblyName.GetAssemblyName(executingAssemblyName); 
     AppDomain appDomain = AppDomain.CurrentDomain; 
     Assembly assembly = appDomain.Load(asmName); 
     _assemblyTypes = assembly.GetTypes().ToList();    
     LoadAppConfig(); 

diese Methode Lasten die ausführende Assembly in der aktuellen App-Domäne. Ich habe eine andere Methode namens LoadAppConfig()

ServicesSection serviceSection = ConfigurationManager.GetSection("system.serviceModel/services") as ServicesSection; 

      ServiceElementCollection sereleColl = serviceSection.Services; 


      string endPointAddress = string.Empty ; 
      foreach (var ele in sereleColl) 
      { 
       _serviceType = GetServiceType((System.ServiceModel.Configuration.ServiceElement)(ele)).Name); 

       break; 

      } 

      ServiceHoster.HostService(_serviceType); 

Diese Methode liest die Datei app.config und findet die Art von Wcf-Dienst. Ich habe noch eine Klasse ServiceHoster, in dem ich eine Methode HostService haben:

public static void HostService(Type serviceType) 
     { 

      using (ServiceHost host = new ServiceHost(serviceType)) 
      { 
       host.Open(); 
      } 

     } 

jetzt, ich habe ein anderes Projekt namens MyWCFService und ich fügen Sie den Bezug von AddServiceLibrary in diesem Projekt und rufen Sie die Methode;

AddServiceLibrary.LoadLibrary lb = new AddServiceLibrary.LoadLibrary(); 
      lb.AssemblyLoader(); 

ich an dieser Stelle hoffen, dass mein Dienst ordnungsgemäß gehostet wird, aber wenn ich AddServiceReference in meinem Client-Projekt möchte sagen, dass es mir ist, dass keine Verbindung hergestellt werden konnte, weil die Zielmaschine aktiv verweigert es in prob Wenn ich meine AddServiceLibrary nicht verwende, finde ich den Dienst und funktioniert gut. Bitte schaut sie euch an und suggeriert mir, was in meinem Ansatz falsch sein könnte.

Antwort

5

Sie verfügen über die ServiceHost-Instanz, sobald Sie sie öffnen. Entfernen Sie den using-Block und behandeln Sie die Entsorgung dieses Hosts separat.

Die Entscheidung, einen statischen ServiceHoster zu erstellen, ist wahrscheinlich ein Problem. Was immer den Service hostet, indem die ServiceHost-Instanz instanziiert wird, muss das Leben dieser Instanz und deren Entsorgung verwalten.

+0

danke sir, es funktioniert, wenn ich den using block entfernen, aber sir können sie pls guide mich wie kann ich die entsorgung von service-host separat implementieren? –

+0

Welche Methode haben Sie derzeit, um das Hosting des Dienstes zu stoppen? Können Sie mehr von Ihrer ServiceHoster-Klasse posten? –

+0

Der komplette Klasse ist wie folgt: Klasse ServiceHoster { public static void HostService (Typ Servicetype) { Servicehost host = neue Servicehost (Servicetype); versuchen Sie { host.Open(); } } } –

Verwandte Themen