Configurazione dei servizi WCF nel codiceConfiguring WCF Services in Code

Windows Communication Foundation (WCF) consente agli sviluppatori di configurare i servizi utilizzando file di configurazione o codice.Windows Communication Foundation (WCF) allows developers to configure services using configuration files or code. I file di configurazione sono utili quando è necessario configurare un servizio dopo la relativa distribuzione.Configuration files are useful when a service needs to be configured after being deployed. Quando si utilizzano i file di configurazione, un professionista IT deve solo aggiornare il file di configurazione. Non è necessario eseguire la ricompilazione.When using configuration files, an IT professional only needs to update the configuration file, no recompilation is required. I file di configurazione, tuttavia, possono risultare complessi e difficili da gestire.Configuration files, however, can be complex and difficult to maintain. Non è disponibile alcun supporto per il debug dei file di configurazione e, poiché il riferimento agli elementi di configurazione viene fatto in base ai nomi, i file di configurazione della creazione possono risultare difficili e soggetti a errori.There is no support for debugging configuration files and configuration elements are referenced by names which makes authoring configuration files error-prone and difficult. WCF consente inoltre di configurare i servizi nel codice.WCF also allows you to configure services in code. Nelle versioni precedenti di servizi di configurazione WCF (4.0 e versioni precedenti) nel codice era semplice negli scenari indipendenti di ServiceHost classe consentiva di configurare endpoint e comportamenti prima di chiamare ServiceHost.In earlier versions of WCF (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. Negli scenari ospitati dal Web, tuttavia, non è possibile accedere direttamente alla classe ServiceHost.In web hosted scenarios, however, you don’t have direct access to the ServiceHost class. Per configurare un servizio ospitato dal Web era necessario creare un oggetto System.ServiceModel.ServiceHostFactory che creava l'oggetto ServiceHostFactory ed effettuava qualsiasi configurazione richiesta.To configure a web hosted service you were required to create a System.ServiceModel.ServiceHostFactory that created the ServiceHostFactory and performed any needed configuration. A partire da .NET 4.5, WCF fornisce un modo più semplice configurare entrambi self-hosted e servizi nel codice ospitato sul web.Starting with .NET 4.5, WCF provides an easier way to configure both self-hosted and web hosted services in code.

Metodo ConfigureThe Configure method

Definire semplicemente un metodo statico pubblico denominato Configure con la firma seguente nella classe di implementazione del servizio:Simply define a public static method called Configure with the following signature in your service implementation class:

public static void Configure(ServiceConfiguration config)  

Il metodo Configure accetta un'istanza dell'oggetto ServiceConfiguration che consente allo sviluppatore di aggiungere endpoint e comportamenti.The Configure method takes a ServiceConfiguration instance that enables the developer to add endpoints and behaviors. Questo metodo viene chiamato da WCF prima che venga aperto l'host del servizio.This method is called by WCF before the service host is opened. Una volta definito, tutte le impostazioni di configurazione del servizio specificate in un file app.config o web.config verranno ignorate.When defined, any service configuration settings specified in an app.config or web.config file will be ignored.

Nel frammento di codice riportato di seguito viene illustrato come definire il metodo Configure e aggiungere un endpoint del servizio, un comportamento dell'endpoint e comportamenti del servizio: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;  
        }  
    }  

Per abilitare un protocollo come HTTPS per un servizio, è possibile aggiungere in modo esplicito un endpoint che utilizza il protocollo oppure aggiungere automaticamente gli endpoint chiamando ServiceConfiguration.EnableProtocol(Binding) che aggiunge un endpoint per ogni indirizzo di base compatibile con il protocollo e ogni contratto di servizio definito.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. Nel codice seguente viene illustrato come utilizzare il metodo ServiceConfiguration.EnableProtocol: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");   
    }   
}   

Le impostazioni di <protocolMappings> sezione vengono utilizzati solo se nessun endpoint applicazione aggiunti al ServiceConfiguration a livello di codice. Facoltativamente, è possibile caricare la configurazione del servizio dal file di configurazione dell'applicazione predefinito chiamando LoadFromConfiguration e quindi modificare le impostazioni.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. La classe LoadFromConfiguration() consente inoltre di caricare la configurazione da una configurazione centralizzata.The LoadFromConfiguration() class also allows you to load configuration from a centralized configuration. Nell'esempio di codice seguente viene illustrato come implementare questa azione: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));   
    }   
}  

Importante

Si noti che LoadFromConfiguration Ignora <host> impostazioni all'interno di <service> tag di <system.serviceModel>.Note that LoadFromConfiguration ignores <host> settings within the <service> tag of <system.serviceModel>. Concettualmente, <host> di configurazione dell'host, non la configurazione del servizio e si ottiene caricato prima di configurare il metodo viene eseguito.Conceptually, <host> is about host configuration, not service configuration, and it gets loaded before the Configure method executes.

Vedere ancheSee Also

Configurazione dei servizi tramite file di configurazioneConfiguring Services Using Configuration Files
Configurazione dei comportamenti clientConfiguring Client Behaviors
Configurazione semplificataSimplified Configuration
Attivazione basata sulla configurazioneConfiguration-Based Activation
ConfigurazioneConfiguration
Attivazione basata sulla configurazione in IIS e WASConfiguration-Based Activation in IIS and WAS
Supporto di configurazione e metadatiConfiguration and Metadata Support
ConfigurazioneConfiguration
Procedura: Specificare un'associazione al servizio nella configurazioneHow to: Specify a Service Binding in Configuration
Procedura: Creare un endpoint di servizio nella configurazioneHow to: Create a Service Endpoint in Configuration
Procedura: Pubblicare metadati per un servizio usando un file di configurazioneHow to: Publish Metadata for a Service Using a Configuration File
Procedura: Specificare un'associazione al client nella configurazioneHow to: Specify a Client Binding in Configuration