Vorgehensweise: Austauschen von Nachrichten innerhalb einer zuverlässigen SitzungHow to: Exchange Messages Within a Reliable Session

Dieses Thema enthält einen Überblick über die Schritte zum Aktivieren einer zuverlässigen Sitzung mithilfe einer der vom System bereitgestellten Bindungen, die eine solche Sitzung zwar unterstützen, dies jedoch nicht standardmäßig.This topic outlines the steps required to enable a reliable session using one of the system-provided bindings that support such a session, but not by default. Sie können eine zuverlässige Sitzung imperativ über Code oder deklarativ in der Konfigurationsdatei.You enable a reliable session imperatively using code or declaratively in your configuration file. Diese Prozedur verwendet der Client und Dienst-Konfigurationsdateien, um die zuverlässige Sitzung zu aktivieren und um festzulegen, dass die Nachrichten in der gleichen Reihenfolge eintreffen in der sie gesendet wurden.This procedure uses the client and service configuration files to enable the reliable session and to stipulate that the messages arrive in the same order in which they were sent.

Der wesentliche Teil dieser Prozedur ist, dass der Endpunkt-Konfigurationselement enthalten eine bindingConfiguration -Attribut, das auf die Bindungskonfiguration mit dem Namen Binding1.The key part of this procedure is that the endpoint configuration element contain a bindingConfiguration attribute that references a binding configuration named Binding1. Die <Bindung > Konfigurationselement verweist auf diesen Namen, um zuverlässige Sitzungen zu aktivieren, durch Festlegen der enabled Attribut des der <ReliableSession > Element true.The <binding> configuration element references this name to enable reliable sessions by setting the enabled attribute of the <reliableSession> element to true. Sie geben die Zusicherung einer Zustellung in der richtigen Reihenfolge für die zuverlässige Sitzung an, indem Sie das ordered-Attribut auf true festlegen.You specify the ordered delivery assurances for the reliable session by setting the ordered attribute to true.

Eine Kopie der Quelle dieses Beispiels, finden Sie unter zuverlässige WS-Sitzung.For the source copy of this example, see WS Reliable Session.

Konfigurieren Sie den Dienst mit WSHttpBinding zur Verwendung einer zuverlässigen SitzungConfigure the service with a WSHttpBinding to use a reliable session

  1. Definieren Sie einen Dienstvertrag für den Diensttyp.Define a service contract for the type of service.

    [ServiceContract]
    public interface ICalculator
    {
        [OperationContract]
        double Add(double n1, double n2);
        [OperationContract]
        double Subtract(double n1, double n2);
        [OperationContract]
        double Multiply(double n1, double n2);
        [OperationContract]
        double Divide(double n1, double n2);
    }
    
  2. Implementieren Sie den Dienstvertrag in einer Dienstklasse.Implement the service contract in a service class. Beachten Sie, dass die Adresse oder die Bindungsinformationen Informationen in der Implementierung des Diensts nicht angegeben ist.Note that the address or binding information isn't specified inside the implementation of the service. Sie sind nicht erforderlich, um Code schreiben, um die Adresse oder die Bindungsinformationen Informationen aus der Konfigurationsdatei abzurufen.You aren't required to write code to retrieve the address or binding information information from the configuration file.

    public class CalculatorService : ICalculator
    {
        public double Add(double n1, double n2)
        {
            return n1 + n2;
        }
        public double Subtract(double n1, double n2)
        {
            return n1 - n2;
        }
        public double Multiply(double n1, double n2)
        {
            return n1 * n2;
        }
        public double Divide(double n1, double n2)
        {
            return n1 / n2;
        }
    } 
    
  3. Erstellen einer "Web.config" Datei so konfigurieren Sie einen Endpunkt für die CalculatorService , verwendet die WSHttpBinding mit aktivierter zuverlässiger Sitzung und geordnete Übermittlung von Nachrichten, die erforderlich sind.Create a Web.config file to configure an endpoint for the CalculatorService that uses the WSHttpBinding with reliable session enabled and ordered delivery of messages required.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
    
        <services>
          <service name="Microsoft.ServiceModel.Samples.CalculatorService">
    
            <!-- 
                 This endpoint is exposed at the base address provided by 
                 host: http://localhost/servicemodelsamples/service.svc
                 
                 Specify wsHttpBinding binding and a binding configuration 
                 to use
            -->
            <endpoint address=""
                      binding="wsHttpBinding"
                      bindingConfiguration="Binding1" 
                      contract="Microsoft.ServiceModel.Samples.ICalculator" />
    
            <!--
              The mex endpoint is explosed at 
              http://localhost/servicemodelsamples/service.svc/mex
            -->
            <endpoint address="mex"
                      binding="mexHttpBinding"
                      contract="IMetadataExchange" />
          </service>
        </services>
    
        <!-- 
             Configures WSHttpBinding for reliable sessions with ordered 
             delivery. 
        -->
        <bindings>
          <wsHttpBinding>
            <binding name="Binding1">
              <reliableSession enabled="true" ordered="true" />
            </binding>
          </wsHttpBinding>
        </bindings>
    
      </system.serviceModel>
    </configuration>
    
  4. Erstellen einer Service.svc -Datei, die die Zeile enthält:Create a Service.svc file that contains the line:

    <%@ServiceHost language=c# Service="CalculatorService" %>
    
  5. Ort der Service.svc Datei in das virtuelle Verzeichnis für Internetinformationsdienste (Internet Information Services, IIS).Place the Service.svc file in your Internet Information Services (IIS) virtual directory.

Konfigurieren Sie den Client mit WSHttpBinding zur Verwendung einer zuverlässigen SitzungConfigure the client with a WSHttpBinding to use a reliable session

  1. Verwenden der ServiceModel Metadata Utility Tool (Svcutil.exe) über die Befehlszeile, um Code von Dienstmetadaten zu generieren:Use the ServiceModel Metadata Utility Tool (Svcutil.exe) from the command line to generate code from service metadata:

    Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address>
    
  2. Der generierte Client enthält die ICalculator -Schnittstelle, die den Dienstvertrag definiert, die Clientimplementierung entsprechen muss.The generated client contains the ICalculator interface that defines the service contract that the client implementation must satisfy.

    //Generated interface defining the ICalculator contract	
    [System.ServiceModel.ServiceContractAttribute(
    Namespace="http://Microsoft.ServiceModel.Samples", 
    ConfigurationName="Microsoft.ServiceModel.Samples.ICalculator")]
    public interface ICalculator
    {
        [System.ServiceModel.OperationContractAttribute(
        Action="http://Microsoft.ServiceModel.Samples/ICalculator/Add", 
        ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/AddResponse")]
        double Add(double n1, double n2);
            
        [System.ServiceModel.OperationContractAttribute(
        Action="http://Microsoft.ServiceModel.Samples/ICalculator/Subtract", 
        ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/SubtractResponse")]
        double Subtract(double n1, double n2);
            
        [System.ServiceModel.OperationContractAttribute(
        Action="http://Microsoft.ServiceModel.Samples/ICalculator/Multiply", 
        ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/MultiplyResponse")]
        double Multiply(double n1, double n2);
            
        [System.ServiceModel.OperationContractAttribute(
        Action="http://Microsoft.ServiceModel.Samples/ICalculator/Divide", 
        ReplyAction="http://Microsoft.ServiceModel.Samples/ICalculator/DivideResponse")]
        double Divide(double n1, double n2);
    }
    
  3. Die generierte Clientanwendung enthält außerdem die Implementierung von ClientCalculator.The generated client application also contains the implementation of the ClientCalculator. Beachten Sie, dass die Adresse und Bindung Informationen nicht an einer beliebigen Stelle in der Implementierung des Diensts angegeben ist.Note that the address and binding information isn't specified anywhere inside the implementation of the service. Sie sind nicht erforderlich, um Code schreiben, um die Adresse oder die Bindungsinformationen Informationen aus der Konfigurationsdatei abzurufen.You aren't required to write code to retrieve the address or binding information information from the configuration file.

    // Implementation of the CalculatorClient
    public partial class CalculatorClient : 
        System.ServiceModel.ClientBase<Microsoft.ServiceModel.Samples.ICalculator>, 
        Microsoft.ServiceModel.Samples.ICalculator
    {
        public CalculatorClient()
        {
        }
        
        public CalculatorClient(string endpointConfigurationName) : 
            base(endpointConfigurationName)
        {
        }
        
        public CalculatorClient(string endpointConfigurationName, string remoteAddress) : 
            base(endpointConfigurationName, remoteAddress)
        {
        }
        
        public CalculatorClient(string endpointConfigurationName, 
            System.ServiceModel.EndpointAddress remoteAddress) : 
            base(endpointConfigurationName, remoteAddress)
        {
        }
        
        public CalculatorClient(System.ServiceModel.Channels.Binding binding, 
            System.ServiceModel.EndpointAddress remoteAddress) : 
            base(binding, remoteAddress)
        {
        }
        
        public double Add(double n1, double n2)
        {
            return base.Channel.Add(n1, n2);
        }
        
        public double Subtract(double n1, double n2)
        {
            return base.Channel.Subtract(n1, n2);
        }
        
        public double Multiply(double n1, double n2)
        {
            return base.Channel.Multiply(n1, n2);
        }
        
        public double Divide(double n1, double n2)
        {
            return base.Channel.Divide(n1, n2);
        }
    }
    
  4. Svcutil.exe generiert auch die Konfiguration für den Client, verwendet die WSHttpBinding Klasse.Svcutil.exe also generates the configuration for the client that uses the WSHttpBinding class. Benennen Sie die Konfigurationsdatei "App.config" bei Verwendung von Visual Studio.Name the configuration file App.config when using Visual Studio.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
    
        <client>
          <!-- 
            Specify wsHttpBinding binding and a binding configuration 
            to use
          -->
          <endpoint 
              address="http://localhost/servicemodelsamples/service.svc" 
              binding="wsHttpBinding" 
              bindingConfiguration="Binding1" 
              contract="Microsoft.ServiceModel.Samples.ICalculator" />
        </client>
    
        <!-- 
          Configures WSHttpBinding for reliable sessions with ordered 
          delivery
        -->
        <bindings>
          <wsHttpBinding>
            <binding name="Binding1">
              <reliableSession enabled="true" ordered="true" />
            </binding>
          </wsHttpBinding>
        </bindings>
    
      </system.serviceModel>
    </configuration>
    
  5. Erstellen Sie eine Instanz von der ClientCalculator in einer Anwendung, und rufen Sie die Dienstvorgänge.Create an instance of the ClientCalculator in an application and call the service operations.

    //Client implementation code.
    class Client
    {
        static void Main()
        {
            // Create a client with given client endpoint configuration
            CalculatorClient client = new CalculatorClient();
    
            // Call the Add service operation.
            double value1 = 100.00D;
            double value2 = 15.99D;
            double result = client.Add(value1, value2);
            Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
    
            // Call the Subtract service operation.
            value1 = 145.00D;
            value2 = 76.54D;
            result = client.Subtract(value1, value2);
            Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);
    
            // Call the Multiply service operation.
            value1 = 9.00D;
            value2 = 81.25D;
            result = client.Multiply(value1, value2);
            Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);
    
            // Call the Divide service operation.
            value1 = 22.00D;
            value2 = 7.00D;
            result = client.Divide(value1, value2);
            Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
    
            //Closing the client gracefully closes the connection and cleans up resources
            client.Close();
    
            Console.WriteLine();
            Console.WriteLine("Press <ENTER> to terminate client.");
            Console.ReadLine();
        }
    }
    
  6. Kompilieren Sie den Code, und führen Sie den Client aus.Compile and run the client.

BeispielExample

Mehrere der vom System bereitgestellten Bindungen unterstützen standardmäßig zuverlässige Sitzungen.Several of the system-provided bindings support reliable sessions by default. Dazu gehören:These include:

Ein Beispiel dafür, wie eine benutzerdefinierte Bindung erstellen, die zuverlässige Sitzungen unterstützt, finden Sie unter Vorgehensweise: Erstellen einer benutzerdefinierten zuverlässigen Sitzungsbindung mit HTTPS.For an example of how to create a custom binding that supports reliable sessions, see How to: Create a Custom Reliable Session Binding with HTTPS.

Siehe auchSee also

Zuverlässige SitzungenReliable Sessions