Konfigurieren von WCF-Diensten in CodeConfiguring WCF Services in Code

Mit Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) können Entwickler Dienste mithilfe von Konfigurationsdateien oder Code konfigurieren.Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) allows developers to configure services using configuration files or code. Konfigurationsdateien sind nützlich, wenn ein Dienst konfiguriert werden muss, nachdem er bereitgestellt wurde.Configuration files are useful when a service needs to be configured after being deployed. Bei der Verwendung von Konfigurationsdateien muss ein IT-Experte nur die Konfigurationsdatei aktualisieren, es ist keine Neukompilierung erforderlich.When using configuration files, an IT professional only needs to update the configuration file, no recompilation is required. Konfigurationsdateien können jedoch komplex und schwierig zu pflegen sein.Configuration files, however, can be complex and difficult to maintain. Das Debuggen von Konfigurationsdateien wird nicht unterstützt. Auf Konfigurationselemente wird über den Namen verwiesen, was die Erstellung von Konfigurationsdateien fehleranfällig und schwierig macht.There is no support for debugging configuration files and configuration elements are referenced by names which makes authoring configuration files error-prone and difficult. WCFWCF ermöglicht auch das Konfigurieren von Diensten im Code. also allows you to configure services in code. In früheren Versionen von WCFWCF (4.0 und früher) war das Konfigurieren von Diensten im Code in selbstgehosteten Szenarien einfach, weil die ServiceHost-Klasse die Möglichkeit bot, Endpunkte und Verhaltensweisen vor dem Aufrufen von ServiceHost.Open zu konfigurieren.In earlier versions of WCFWCF (4.0 and earlier) configuring services in code was easy in self-hosted scenarios, the ServiceHost class allowed you to configure endpoints and behaviors prior to calling ServiceHost.Open. In webgehosteten Szenarien haben Sie jedoch keinen direkten Zugriff auf die ServiceHost-Klasse.In web hosted scenarios, however, you don’t have direct access to the ServiceHost class. Um einen webgehosteten Dienst zu konfigurieren, mussten Sie eine System.ServiceModel.ServiceHostFactory erstellen, durch die ein ServiceHostFactory erstellt und alle erforderlichen Konfigurationsschritte ausgeführt wurden.To configure a web hosted service you were required to create a System.ServiceModel.ServiceHostFactory that created the ServiceHostFactory and performed any needed configuration. Ab .NET 4.5 bietet WCFWCF eine einfachere Möglichkeit, selbstgehostete und webgehostete Dienste im Code zu konfigurieren.Starting with .NET 4.5, WCFWCF provides an easier way to configure both self-hosted and web hosted services in code.

Die Configure-MethodeThe Configure method

Definieren Sie einfach in der Dienstimplementierungsklasse die öffentliche statische Methode Configure mit der folgenden Signatur:Simply define a public static method called Configure with the following signature in your service implementation class:

public static void Configure(ServiceConfiguration config)  

Die Configure-Methode akzeptiert eine ServiceConfiguration-Instanz, die es den Entwicklern ermöglicht, Endpunkte und Verhalten hinzuzufügen.The Configure method takes a ServiceConfiguration instance that enables the developer to add endpoints and behaviors. Diese Methode wird von WCFWCF aufgerufen, bevor der Diensthost geöffnet wird.This method is called by WCFWCF before the service host is opened. Sofern definiert, werden alle Dienstkonfigurationseinstellungen in der Datei app.config oder web.config ignoriert.When defined, any service configuration settings specified in an app.config or web.config file will be ignored.

Der folgende Codeausschnitt zeigt, wie die Configure-Methode definiert wird und ein Dienstendpunkt, ein Endpunktverhalten und Dienstverhalten hinzugefügt werden:The following code snippet illustrates how to define the Configure method and add a service endpoint, an endpoint behavior and service behaviors:

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, z. B. 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.To enable a protocol such as https for a service, you can either explicitly add an endpoint that uses the protocol or you can automatically add endpoints by calling ServiceConfiguration.EnableProtocol(Binding) which adds an endpoint for each base address compatible with the protocol and each service contract defined. Der folgende Code veranschaulicht die Verwendung der ServiceConfiguration.EnableProtocol-Methode:The following code illustrates how to use the ServiceConfiguration.EnableProtocol method:

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 in der <protocolMappings> Abschnitt werden nur verwendet, wenn keine Endpunkte hinzugefügt werden die ServiceConfiguration programmgesteuert. Sie können optional die Dienstkonfiguration aus der Standard-Anwendungskonfigurationsdatei laden, durch den Aufruf LoadFromConfiguration und klicken Sie dann die Einstellungen zu ändern.The settings in the <protocolMappings> section are only used if no application endpoints are added to the ServiceConfiguration programmatically.You can optionally load the service configuration from the default application configuration file by calling LoadFromConfiguration and then change the settings. Sie können auch mit der LoadFromConfiguration()-Klasse die Konfiguration aus einer zentralen Konfiguration laden.The LoadFromConfiguration() class also allows you to load configuration from a centralized configuration. Im folgenden Code wird veranschaulicht, wie dies implementiert wird:The following code illustrates how to implement this:

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 LoadFromConfiguration ignoriert <host> Einstellungen in der <service>-Tag <system.serviceModel>.Note that LoadFromConfiguration ignores <host> settings within the <service> tag of <system.serviceModel>. Im Prinzip <host> geht es um Hostkonfiguration nicht Dienstkonfiguration, und er ruft geladen, bevor die Configure-Methode ausgeführt wird.Conceptually, <host> is about host configuration, not service configuration, and it gets loaded before the Configure method executes.

Siehe auchSee Also

Konfigurieren von Diensten mit KonfigurationsdateienConfiguring Services Using Configuration Files
Konfigurieren von ClientverhaltenConfiguring Client Behaviors
Vereinfachte KonfigurationSimplified Configuration
Konfigurationsbasierte AktivierungConfiguration-Based Activation
KonfigurationConfiguration
Konfigurationsbasierte Aktivierung unter IIS und WASConfiguration-Based Activation in IIS and WAS
Konfiguration und MetadatenunterstützungConfiguration and Metadata Support
KonfigurationConfiguration
Vorgehensweise: Angeben einer Dienstbindung in einer KonfigurationHow to: Specify a Service Binding in Configuration
Vorgehensweise: Erstellen eines Dienstendpunkts in einer KonfigurationHow to: Create a Service Endpoint in Configuration
Vorgehensweise: Veröffentlichen von Metadaten für einen Dienst mithilfe einer KonfigurationsdateiHow to: Publish Metadata for a Service Using a Configuration File
Vorgehensweise: Angeben einer Clientbindung in einer KonfigurationHow to: Specify a Client Binding in Configuration