Vorgehensweise: Erstellen einer benutzerdefinierten zuverlässigen Sitzungsbindung mit HTTPSHow to: Create a Custom Reliable Session Binding with HTTPS

Dieses Thema veranschaulicht die Verwendung der Secure Sockets Layer (SSL)-Transportsicherheit mit zuverlässigen Sitzungen.This topic demonstrates the use of Secure Sockets Layer (SSL) transport security with reliable sessions. Um eine zuverlässige Sitzung über HTTPS verwenden zu können, müssen Sie eine benutzerdefinierte Bindung erstellen, die eine zuverlässige Sitzung und HTTPS-Transport verwendet.To use a reliable session over HTTPS, you must create a custom binding that uses a reliable session and the HTTPS transport. Sie aktivieren die zuverlässige Sitzung entweder verbindlich durch Verwenden von Code oder deklarativ in der Konfigurationsdatei.You enable the reliable session either imperatively by using code or declaratively in the configuration file. Diese Prozedur verwendet die Konfigurationsdateien von Client und Dienst, um die zuverlässige Sitzung zu aktivieren und die <HttpsTransport > Element.This procedure uses the client and service configuration files to enable the reliable session and the <httpsTransport> element.

Der wesentliche Teil dieser Prozedur ist, die die <Endpunkt > Konfigurationselement enthalten eine bindingConfiguration -Attribut, das auf die benutzerdefinierte Bindungskonfiguration mit dem Namen reliableSessionOverHttps.The key part of this procedure is that the <endpoint> configuration element contain a bindingConfiguration attribute that references a custom binding configuration named reliableSessionOverHttps. Die <Bindung > Konfigurationselement verweist auf diesen Namen, um anzugeben, dass eine zuverlässige Sitzung und HTTPS-Transport einschließlich verwendeten < ReliableSession > und <HttpsTransport > Elemente.The <binding> configuration element references this name to specify that a reliable session and the HTTPS transport are used by including <reliableSession> and <httpsTransport> elements.

Eine Kopie der Quelle dieses Beispiels, finden Sie unter benutzerdefiniertes Binden von zuverlässigen Sitzung über HTTPS.For the source copy of this example, see Custom Binding Reliable Session over HTTPS.

Konfigurieren Sie den Dienst mit ' CustomBinding ' zur Verwendung einer zuverlässigen Sitzungs mit HTTPSConfigure the service with a CustomBinding to use a reliable session with HTTPS

  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 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 mit einer benutzerdefinierten Bindung namens reliableSessionOverHttps , die eine zuverlässige Sitzung und HTTPS-Transport verwendet.Create a Web.config file to configure an endpoint for the CalculatorService with a custom binding named reliableSessionOverHttps that uses a reliable session and the HTTPS transport.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
    
        <services>
          <service name="Microsoft.ServiceModel.Samples.CalculatorService" 
                   behaviorConfiguration="CalculatorServiceBehavior">
            <!-- 
              Use base address provided by the host 
            -->
            <endpoint address=""
                      binding="customBinding"
                      bindingConfiguration="reliableSessionOverHttps" 
                      contract="Microsoft.ServiceModel.Samples.ICalculator" />
            <!-- 
              The mex endpoint is exposed as 
              http://localhost/servicemodelsamples/service.svc/mex
            -->
            <endpoint address="mex"
                      binding="mexHttpBinding"
                      contract="IMetadataExchange" />
          </service>
        </services>
    
        <bindings>
          <customBinding>
            <binding name="reliableSessionOverHttps">
              <reliableSession />
              <httpsTransport />
            </binding>
          </customBinding>
        </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 ' CustomBinding ' zur Verwendung einer zuverlässigen Sitzungs mit HTTPSConfigure the client with a CustomBinding to use a reliable session with HTTPS

  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 <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 client that's generated 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 in der Implementierung des Diensts nicht angegeben ist.Note that the address and binding information isn't specified inside the implementation of the service. Sie sind nicht erforderlich, um das Schreiben von Code zum Abrufen der Adresse und Bindung aus der Konfigurationsdatei.You aren't required to write code to retrieve the address and binding 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. Konfigurieren eine benutzerdefinierte Bindung namens reliableSessionOverHttps HTTPS-Transport und zuverlässige Sitzungen verwendet.Configure a custom binding named reliableSessionOverHttps to use the HTTPS transport and reliable sessions.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
    
        <client>
          <!-- 
            This endpoint has an https address
          -->
          <endpoint name=""
                    address="https://localhost/servicemodelsamples/service.svc" 
                    binding="customBinding" 
                    bindingConfiguration="reliableSessionOverHttps" 
                    contract="Microsoft.ServiceModel.Samples.ICalculator" />
        </client>
    
        <bindings>
          <customBinding>
            <binding name="reliableSessionOverHttps">
              <reliableSession />
              <httpsTransport />
            </binding>
          </customBinding>      
        </bindings>
    
      </system.serviceModel>
    </configuration>
    
  5. Erstellen Sie eine Instanz von ClientCalculator in einer Anwendung, und rufen Sie dann die Dienstvorgänge auf.Create an instance of the ClientCalculator in an application and then 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.

.NET Framework-Sicherheit.NET Framework security

Da das in diesem Beispiel verwendete Zertifikat ein mit erstelltes Testzertifikat ist Makecert.exe, eine sicherheitswarnung angezeigt, wenn Sie versuchen, eine HTTPS-Adresse, z. B. den Zugriff auf https://localhost/servicemodelsamples/service.svc, in Ihrem Browser.Because the certificate used in this sample is a test certificate created with Makecert.exe, a security alert appears when you try to access an HTTPS address, such as https://localhost/servicemodelsamples/service.svc, from your browser.

Siehe auchSee also

Zuverlässige SitzungenReliable Sessions