2013-01-08 11 views
5

ich folgendeWie gehe ich Parameter an eine Servicehost

//Define the service host 
     this._smeediPluginServiceHost = new ServiceHost(typeof(SmeediServiceHost), smeediServiceUri); 
     this._smeediPluginServiceHost.AddServiceEndpoint(typeof(ISmeediServiceHost), GetBinding(), smeediServiceUri); 
     SetupAndStartWebService(_smeediPluginServiceHost); 


    private void SetupAndStartWebService(ServiceHost serviceHost, ServiceDiscoveryBehavior serviceDiscoveryBehavior = null) 
    { 
     //Define service behaviours 
     ServiceMetadataBehavior serviceMetadataBehavior = new ServiceMetadataBehavior(); 
     serviceMetadataBehavior.HttpGetEnabled = true; 

     //Add the behaviours to the service 
     serviceHost.Description.Behaviors.Add(serviceMetadataBehavior); 

     if (serviceDiscoveryBehavior != null) 
      serviceHost.Description.Behaviors.Add(serviceDiscoveryBehavior); 

     serviceHost.Open(); 
    } 

Ich brauche mache einen Parameter an den Service zu übergeben, und ich kann nicht herausfinden, wie. Ich habe mir How do I pass values to the constructor on my wcf service? angesehen, aber ich konnte mich nicht darum kümmern. Danke

+0

Konnten Sie gerade aus der Datei app.config mit ConfigurationManager.AppSettings [] innerhalb des Dienstes selbst lesen, anstatt an den Konstruktor zu übergeben? – TylerOhlsen

Antwort

17

Wenn ich richtig verstehe, möchten Sie Parameter an den Konstruktor Ihrer Service-Implementierungsklasse übergeben. Sie können dazu von passing an instance of the service class to the ServiceHost constructor, anstatt von seinem Typ. Das heißt:

// Create the service instance 
var instance = new SmeediServiceHost("some parameters"); 

// Define the service host using the above instance 
this._smeediPluginServiceHost = new ServiceHost(instance, smeediServiceUri); 

Vorsicht - mit diesem Ansatz bedeutet, dass Sie eine einzelne Instanz der Dienstklasse verwenden. Wenn Sie eine neue Instanz pro Sitzung oder pro Anforderung benötigen, sollten Sie eine ServiceHostFactory wie in this answer beschrieben verwenden.

+0

+1. Als zusätzlichen nützlichen Artikel: [WCF Service Instancing] (http://devproconnections.com/net-framework/wcf-service-instancing) – informatik01