Exportar (0) Imprimir
Expandir todo
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Configurar servicios WCF en el código

.NET Framework 4.5

Windows Communication Foundation (WCF) permite a los desarrolladores configurar servicios mediante archivos de configuración o código. Los archivos de configuración son útiles cuando un servicio necesita ser configurado después de implementarse. Cuando se usan archivos de configuración, un profesional de TI solo necesita actualizar el archivo de configuración; no debe realizar ninguna recompilación. Los archivos de configuración, sin embargo, pueden ser complejos y difíciles de mantener. No se admite depurar archivos de configuración y se hace referencia a los elementos de configuración por nombre, lo que hace que la creación de archivos de configuración sea propensa a errores y difícil. WCF también le permite configurar servicios en código. En versiones anteriores de WCF (4.0 y anteriores), la configuración de servicios en código era sencilla en escenarios hospedados por sí mismos; la clase ServiceHost le permitía configurar extremos y comportamientos antes de llamar a ServiceHost.Open. En escenarios hospedados en web, sin embargo, no tiene acceso directo a la clase ServiceHost. Para configurar un servicio web hospedado era necesario crear un ServiceHostFactory que creaba el ServiceHost y realizaba cualquier configuración necesaria. A partir de.NET 4.5, WCF proporciona una manera más fácil de configurar los servicios hospedados por sí mismos y los hospedados en web en el código.

Defina simplemente un método estático público denominado Configure con la signatura siguiente en la clase de implementación del servicio:

public static void Configure(ServiceConfiguration config)

El método Configure toma una instancia de ServiceConfiguration que permite al desarrollador agregar extremos y comportamientos.WCF llama a este método antes de abrir el host de servicio.Cuando se definen, los valores de configuración de servicio especificados en un archivo app.config o web.config se omitirán.

El fragmento de código siguiente muestra cómo definir el método Configure y agregar un extremo de servicio, un comportamiento de extremo y comportamientos del servicio:

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;
        }
    }

Para habilitar un protocolo como https para un servicio, puede agregar explícitamente un extremo que use el protocolo o puede agregar automáticamente extremos llamando a ServiceConfiguration.EnableProtocol (Binding) que agregue un extremo para cada dirección base compatible con el protocolo y cada contrato de servicio definido.El código siguiente ilustra cómo usar el método ServiceConfiguration.EnableProtocol:

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"); 
    } 
} 

Los valores de la sección <protocolMappings> solo se usan si no se agrega ningún extremo de aplicación a ServiceConfiguration mediante programación. Puede cargar opcionalmente la configuración del servicio desde el archivo de configuración de aplicación predeterminado llamando a LoadFromConfiguration y después cambiar los valores.La clase ServiceConfiguration también permite cargar la configuración desde una configuración centralizada.El código siguiente muestra cómo implementar esto:

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)); 
    } 
} 

Nota importanteImportante

Observe que LoadFromConfiguration omite los valores de <host> dentro de la etiqueta <service> de <system.serviceModel>.Conceptualmente, <host> se refiere a la configuración de host, no a la configuración de servicio, y se carga antes de que se ejecute el método Configure.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft