Exportar (0) Imprimir
Expandir todo

Procedimiento:Hospedar un servicio WCF que usa el Service Bus Service

Actualizado: junio de 2014

El hospedaje del servicio es el último paso de la creación de una aplicación de Service Bus.Antes de alcanzar este punto, habrá definido e implementado el contrato de servicio, definido y configurado el extremo de servicio y creado las credenciales de seguridad.Para obtener más información sobre qué hacer antes de hospedar la aplicación, vea Generación de un servicio para Service Bus.El próximo paso es agrupar todas las partes y lograr que funcionen.El proceso se logra mediante el host de servicio, que usa la dirección URL del proyecto, junto con el contrato, y crea una conexión a Service Bus.

En el primer procedimiento se describe cómo crear un servicio que usa Service Bus, con los ajustes de configuración definidos mediante programación.En el segundo procedimiento se muestra cómo crear un servicio cuando la mayor parte de la configuración está especificada en el archivo App.config.Este procedimiento sigue el ejemplo de NetOneWay del SDK de .Para conocer una aproximación híbrida que usa tanto configuración programática como un archivo App.config, vea los pasos 1 a 4 de Tutorial de mensajería retransmitida del Service Bus.

Para obtener una descripción completa del hospedaje de una aplicación, vea Hosting Services en la documentación de Windows Communication Foundation (WCF).

  1. Cree una dirección para el servicio.

    La dirección para el proyecto de Service Bus se usa tanto en el servicio como en las aplicaciones cliente.En el caso de un servicio, el identificador URI se usa para determinar dónde Service Bus expone el servicio.En el caso de un cliente, el URI determina dónde el cliente busca el servicio:

    string servicePath = "ServicePath";
    string serviceNamespace = "ServiceNamespace";
    Uri uri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, servicePath);
    
    
  2. Cree una nueva instancia de ServiceHost.

    host = new ServiceHost(typeof(EchoService), uri);
    

    En este ejemplo, el host de servicio usa la dirección proporcionada, además del tipo que implementa el contrato de servicio.En este ejemplo, la clase que implementa el contrato de servicio se denomina EchoService.

  3. Cree una descripción del contrato con una llamada a ContractDescription.

    ContractDescription contractDescription = ContractDescription.GetContract(typeof(IEchoContract), typeof(EchoService));
    

    ContractDescription vincula el contrato con la implementación específica que desea usar.En este ejemplo, el contrato se define en IEchoContract, y la implementación del contrato es EchoService.

  4. Defina la dirección y el enlace del extremo:

    ServiceEndpoint serviceEndPoint = new ServiceEndpoint(contractDescription);
    serviceEndPoint.Address = new EndpointAddress(uri);
    serviceEndPoint.Binding = new NetTcpRelayBinding();
    
  5. Agregue los comportamientos adicionales necesarios al extremo como, por ejemplo, comportamientos de seguridad o publicación:

    serviceEndPoint.Behaviors.Add(sharedSecretServiceBusCredential);
    

    En este ejemplo de código, sharedSecretServiceBusCredential se creó anteriormente para almacenar las credenciales de seguridad.

  6. Agregue el extremo de servicio a la instancia de host de servicio.Este paso indica el extremo para el que desea crear instancias.

    host.Description.Endpoints.Add(serviceEndPoint);
    
  7. Abra el servicio mediante una llamada a ServiceHost.Open.

    Si es correcto, el servicio estará disponible para que una aplicación cliente se comunique a través de Service Bus sin necesidad de otras acciones.No obstante, es posible que desee realizar tareas adicionales, como notificar al usuario que el host es correcto.

    host.Open();
    
    Console.WriteLine(String.Format("Listening at: {0}", endPoint));
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  8. Cuando haya terminado, cierre el host con ServiceHost.Close.

    host.Close();
    

  1. Cree el nombre del proyecto que se va a exponer en el Service Bus:

    string serviceBusProjectName = "myProjectNameHere";
    

  2. Cree el URI del servicio:

    Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceBusProjectName, "OnewayService");
    
  3. Cree una nueva instancia de ServiceHost.

    ServiceHost host = new ServiceHost(typeof(LogService), uri);
    

    En este punto, el host de servicio usa la dirección suministrada, además del tipo que implementa el contrato de servicio.En este ejemplo, la clase que implementa el contrato de servicio se denomina LogService.

  4. Si es correcto, el servicio estará disponible para que una aplicación cliente se comunique a través del Service Bus sin necesidad de otras acciones.

    host.Open();
    
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  5. Cuando haya terminado, cierre el host con ServiceHost.Close.

    host.Close();
    
  6. En el archivo App.config, agregue la información de credenciales y enlace del proyecto.

    En el ejemplo de código descrito al final de este tema, podrá encontrar un ejemplo de archivo App.config con esta información.

Ejemplo

En los siguientes ejemplos se describe el procedimiento para definir y crear una aplicación de servicio mediante programación.


    class Program
    {
        static void Main(string[] args)
        {
            string servicePath = "ServicePath";
            string serviceNamespace = "ServiceNamespace";
            string issuerName = "IssuerName";
            string issuerSecret = "IssuerSecret";

            // Construct a Service Bus URI
            Uri uri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, servicePath);

            // Create a Behavior for the Credentials
            TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
            sharedSecretServiceBusCredential.CredentialType = TransportClientCredentialType.SharedSecret;
            sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerName = issuerName;
            sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerSecret = issuerSecret;

            // Create the Service Host 
            host = new ServiceHost(typeof(EchoService), uri);
            ContractDescription contractDescription = ContractDescription.GetContract(typeof(IEchoContract), typeof(EchoService));
            ServiceEndpoint serviceEndPoint = new ServiceEndpoint(contractDescription);
            serviceEndPoint.Address = new EndpointAddress(uri);
            serviceEndPoint.Binding = new NetTcpRelayBinding();
            serviceEndPoint.Behaviors.Add(sharedSecretServiceBusCredential);
            host.Description.Endpoints.Add(serviceEndPoint);

            host.Open();

            Console.WriteLine(String.Format("Listening at: {0}", endPoint));
            Console.WriteLine("Press [Enter] to exit");
            Console.ReadLine();

            host.Close();
        }
    }




//Service that is configured mainly with an App.config file
   class Program
    {
        static void Main(string[] args)
        {
            string serviceNamespace = GetServiceNamespace();
            Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "OnewayService");

            ServiceHost host = new ServiceHost(typeof(OnewayService), address);
            host.Open();

            Console.WriteLine("Press [Enter] to exit");
            Console.ReadLine();

            host.Close();
        }
    }


//App.config file associated with the previous code sample

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="sharedSecretClientCredentials">
          <transportClientEndpointBehavior credentialType="SharedSecret">
            <clientCredentials>
              <sharedSecret issuerName="ISSUER_NAME" issuerSecret="ISSUER_SECRET" />
            </clientCredentials>
          </transportClientEndpointBehavior>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <!-- Application Binding -->
      <netOnewayRelayBinding>
        <binding name="default" />
      </netOnewayRelayBinding>
    </bindings>
    <services>
      <service name="Microsoft.ServiceBus.Samples.OnewayService">
        <endpoint address="" behaviorConfiguration="sharedSecretClientCredentials"
          binding="netOnewayRelayBinding" bindingConfiguration="default"
          name="RelayEndpoint" contract="Microsoft.ServiceBus.Samples.IOnewayContract" />
      </service>
    </services>
   
  </system.serviceModel>
</configuration>

Vea también

Mostrar:
© 2014 Microsoft