(0) exportieren Drucken
Alle erweitern

Vorgehensweise:Hosten eines WCF-Diensts, der den Service Bus Service verwendet

Letzte Aktualisierung: Juni 2014

Das Hosten des Dienst ist der abschließende Schritt beim Erstellen einer Servicebus-Anwendung.Bevor Sie diesen Punkt erreichen, haben Sie den Dienstvertrag definiert und implementiert, den Dienstendpunkt definiert und konfiguriert und die Sicherheitsanmeldeinformationen erstellt. Themenbereich zu den Schritten, die vor dem Hosten der Anwendung erforderlich sind, finden Sie unter Erstellen eines Diensts für Service Bus.Der nächste Schritt besteht darin, alle Teile zusammenzubringen und auszuführen.Dieser Vorgang wird über den Diensthost durchgeführt, der die URL Ihres Projekts zusammen mit dem Vertrag verwendet, und eine Verbindung mit Servicebus herstellt.

Im ersten Verfahren wird beschrieben, wie Sie einen Dienst erstellen, der Servicebus verwendet, wobei die Konfigurationseinstellungen programmgesteuert definiert werden.Das zweite Verfahren zeigt das Erstellen eines Diensts, wenn der Großteil der Konfiguration in der Datei App.config angegeben wird.Dieses Verfahren lehnt sich an das Beispiel NetOneWay im SDK an.Informationen zu einem hybriden Ansatz, bei dem sowohl die programmgesteuerte Konfiguration als auch eine App.config-Datei verwendet werden, finden Sie in den Schritten 1 bis 4 im Lernprogramm zu Service Bus-Relaymessaging.

Eine vollständige Darstellung zum Hosten einer Anwendung finden Sie unter Hosting Services in der Windows Communication Foundation (WCF)-Dokumentation.

  1. Erstellen Sie eine Adresse für Ihren Dienst.

    Die Adresse für Ihr Servicebus-Projekt wird in Dienst- und Clientanwendungen verwendet.Für einen Dienst wird der URI verwendet, um zu ermitteln, wo Servicebus den Dienst bereitstellt.Für einen Client ermittelt der URI, wo der Client nach dem Dienst sucht:

    string servicePath = "ServicePath";
    string serviceNamespace = "ServiceNamespace";
    Uri uri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, servicePath);
    
    
  2. Erstellen Sie eine neue Instanz von ServiceHost.

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

    In diesem Beispiel verwendet der Diensthost die bereitgestellte Adresse zusätzlich zum Typ, den der Dienstvertrag implementiert.In diesem Beispiel trägt die Klasse, die den Dienstvertrag implementiert, den Namen EchoService.

  3. Erstellen einer Beschreibung des Vertrags mit einem Aufruf von ContractDescription.

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

    ContractDescription verknüpft den Vertrag mit der jeweiligen Implementierung, die Sie verwenden möchten.In diesem Beispiel wird der Vertrag in IEchoContract definiert, und die Implementierung des Vertrags ist EchoService.

  4. Definieren der Adresse und der Bindung für den Endpunkt:

    ServiceEndpoint serviceEndPoint = new ServiceEndpoint(contractDescription);
    serviceEndPoint.Address = new EndpointAddress(uri);
    serviceEndPoint.Binding = new NetTcpRelayBinding();
    
  5. Fügen Sie dem Endpunkt ggf. weiteres Verhalten hinzu, z. B. Sicherheits- oder Veröffentlichungsverhalten:

    serviceEndPoint.Behaviors.Add(sharedSecretServiceBusCredential);
    

    In diesem Codebeispiel wurde sharedSecretServiceBusCredential zuvor zum Speichern der Sicherheitsanmeldeinformationen erstellt.

  6. Hinzufügen des Dienstendpunkts zur Diensthostinstanz.Dieser Schritt gibt an, welcher Endpunkt instanziiert werden soll.

    host.Description.Endpoints.Add(serviceEndPoint);
    
  7. Öffnen Sie den Dienst mithilfe eines Aufrufs von ServiceHost.Open.

    Wenn der Aufruf erfolgreich war, steht der Dienst für die Kontaktaufnahme und die Kommunikation mit einer Clientanwendung über Servicebus ohne weitere Aktionen zur Verfügung.Möglicherweise möchten Sie jedoch weitere Aufgaben ausführen, z. B. den Benutzer benachrichtigen, dass der Host erfolgreich war.

    host.Open();
    
    Console.WriteLine(String.Format("Listening at: {0}", endPoint));
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  8. Wenn Sie fertig sind, schließen Sie den Host mit ServiceHost.Close.

    host.Close();
    

  1. Erstellen Sie den Namen des Projekts, das für Servicebus bereitgestellt werden soll:

    string serviceBusProjectName = "myProjectNameHere";
    

  2. Erstellen Sie den URI für Ihren Dienst:

    Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceBusProjectName, "OnewayService");
    
  3. Erstellen Sie eine neue Instanz von ServiceHost.

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

    Hier verwendet der Diensthost die bereitgestellte Adresse zusätzlich zum Typ, den der Dienstvertrag implementiert.In diesem Beispiel trägt die Klasse, die den Dienstvertrag implementiert, den Namen LogService.

  4. Wenn der Aufruf erfolgreich war, steht der Dienst für die Kontaktaufnahme und die Kommunikation mit einer Clientanwendung über Servicebus zur Verfügung, ohne dass weitere Aktionen erforderlich sind.

    host.Open();
    
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  5. Wenn Sie fertig sind, schließen Sie den Host mit ServiceHost.Close.

    host.Close();
    
  6. Fügen Sie in der Datei App.config die Anmelde- und Bindungsinformationen für Ihr Projekt hinzu.

    Eine Beispieldatei App.config, die diese Informationen enthält, finden Sie im Codebeispiel am Ende dieses Themas.

Beispiel

Das folgende Beispiel zeigt, wie eine Dienstanwendung programmgesteuert definiert und erstellt wird.


    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>

Siehe auch

Weitere Ressourcen

Hosten eines WCF-Diensts in IIS

Anzeigen:
© 2014 Microsoft