Konfigurieren von WCF-Diensten in Code

Mit Windows Communication Foundation (WCF) können Entwickler Dienste mithilfe von Konfigurationsdateien oder Code konfigurieren.Konfigurationsdateien sind nützlich, wenn ein Dienst konfiguriert werden muss, nachdem er bereitgestellt wurde.Bei der Verwendung von Konfigurationsdateien muss ein IT-Fachmann nur die Konfigurationsdatei aktualisieren, es ist keine Neukompilierung erforderlich.Konfigurationsdateien können jedoch komplex und schwierig sein zu warten.Es gibt keine Unterstützung zum Debuggen von Konfigurationsdateien. Konfigurationselemente werden durch Namen referenziert, was die Erstellung von Konfigurationsdateien fehleranfällig und schwierig macht.WCF ermöglicht auch das Konfigurieren von Diensten im Code.In früheren Versionen von WCF (4.0 und früher) was das Konfigurieren von Diensten im Code in selbstgehosteten Szenarien einfach, die ServiceHost-Klasse ermöglichte es, Endpunkte und Verhalten vor dem Aufrufen von ServiceHost.Open zu konfigurieren.In webgehosteten Szenarien haben Sie jedoch keinen direkten Zugriff auf die ServiceHost-Klasse.Um einen webgehosteten Dienst zu konfigurieren, mussten Sie eine <xref:System.ServiceModel.ServiceHostFactory> erstellen, die einen ServiceHost erstellte und jede erforderliche Konfiguration ausführte.Ab .NET 4.5 stellt WCF eine einfachere Möglichkeit bereit, um selbstgehostete und webgehostete Dienste im Code zu konfigurieren.

Die Configure-Methode

Definieren Sie eine öffentliche statische Methode Configure mit der folgenden Signatur in der Dienstimplementierungsklasse:

public static void Configure(ServiceConfiguration config)  

Die Configure-Methode akzeptiert eine ServiceConfiguration-Instanz, die den Entwicklern ermöglicht, Endpunkte und Verhalten hinzuzufügen.Diese Methode wird von WCF aufgerufen, bevor der Diensthost geöffnet wird.Wenn sie definiert sind, werden alle Dienstkonfigurationseinstellungen in einer app.config- oder web.config-Datei ignoriert.

Der folgende Codeausschnitt zeigt, wie die Configure-Methode definiert und ein Dienstendpunkt, ein Endpunktverhalten und Dienstverhalten hinzugefügt werden:

public class Service1 : IService1  
    {  
        public static void Configure(ServiceConfiguration config)  
        {  
            ServiceEndpoint se = new ServiceEndpoint(new ContractDescription("IService1"), new BasicHttpBinding(), new EndpointAddress("basic"));  
            se.Behaviors.Add(new MyEndpointBehavior());  
            config.AddServiceEndpoint(se);  

            config.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true });  
            config.Description.Behaviors.Add(new ServiceDebugBehavior { IncludeExceptionDetailInFaults = true });  
        }  

        public string GetData(int value)  
        {  
            return string.Format("You entered: {0}", value);  
        }  

        public CompositeType GetDataUsingDataContract(CompositeType composite)  
        {  
            if (composite == null)  
            {  
                throw new ArgumentNullException("composite");  
            }  
            if (composite.BoolValue)  
            {  
                composite.StringValue += "Suffix";  
            }  
            return composite;  
        }  
    }  

Um ein Protokoll wie HTTPS für einen Dienst zu aktivieren, können Sie entweder explizit einen Endpunkt hinzufügen, der das Protokoll verwendet, oder Sie können automatisch Endpunkte durch Aufrufen von ServiceConfiguration.EnableProtocol(Binding) hinzufügen. Dabei wird ein Endpunkt für jede Basisadresse, die mit dem Protokoll kompatibel ist, und für jeden definierten Dienstvertrag hinzugefügt.Der folgende Code veranschaulicht die Verwendung der ServiceConfiguration.EnableProtocol-Methode:

public class Service1 : IService1   
{   
    public string GetData(int value);   
    public static void Configure(ServiceConfiguration config)   
    {   
        // Enable “Add Service Reference” support   
       config.Description.Behaviors.Add( new ServiceMetadataBehavior { HttpGetEnabled = true });   
       // set up support for http, https, net.tcp, net.pipe   
       config.EnableProtocol(new BasicHttpBinding());   
       config.EnableProtocol(new BasicHttpBinding());   
       config.EnableProtocol(new NetTcpBinding());   
       config.EnableProtocol(new NetNamedPipeBinding());   
       // add an extra BasicHttpBinding endpoint at http:///basic   
       config.AddServiceEndpoint(typeof(IService1), new BasicHttpBinding(),"basic");   
    }   
}   

Die Einstellungen im <protocolMappings>-Abschnitt werden nur verwendet, wenn keine Anwendungsendpunkte programmgesteuert zu ServiceConfiguration hinzugefügt werden. Sie können die Dienstkonfiguration aus der Standardanwendungskonfigurationsdatei optional laden, indem Sie LoadFromConfiguration aufrufen und die Einstellungen dann ändern.Mit der ServiceConfiguration-Klasse können Sie die Konfiguration auch aus einer zentralen Konfiguration laden.Im folgenden Code wird veranschaulicht, wie dies implementiert wird:

public class Service1 : IService1   
{   
    public void DoWork();   
    public static void Configure(ServiceConfiguration config)   
    {   
          config.LoadFromConfiguration(ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = @"c:\sharedConfig\MyConfig.config" }, ConfigurationUserLevel.None));   
    }   
}  
Wichtig

Beachten Sie, dass <xref:System.ServiceModel.LoadFromConfiguration%2A> <host>-Einstellungen im <service>-Tag von <system.serviceModel> ignoriert.Im Prinzip bezieht sich <host> auf die Hostkonfiguration, nicht auf die Dienstkonfiguration, und wird geladen, bevor die Configure-Methode ausgeführt wird.

Siehe auch

Konfigurieren von Diensten mit Konfigurationsdateien
Konfigurieren von Clientverhalten
Vereinfachte Konfiguration
Konfigurationsbasierte Aktivierung
Konfiguration
Konfigurationsbasierte Aktivierung unter IIS und WAS
Konfiguration und Metadatenunterstützung
Konfiguration
Vorgehensweise: Angeben einer Dienstbindung in einer Konfiguration
Gewusst wie: Erstellen eines Dienstendpunkts in einer Konfiguration
Gewusst wie: Veröffentlichen von Metadaten für einen Dienst mithilfe einer Konfigurationsdatei
Vorgehensweise: Angeben einer Clientbindung in einer Konfiguration