Delen via


Procedure: Een aangepaste betrouwbare sessiebinding maken met HTTPS

In dit onderwerp wordt het gebruik van SSL-transportbeveiliging (Secure Sockets Layer) met betrouwbare sessies gedemonstreert. Als u een betrouwbare sessie via HTTPS wilt gebruiken, moet u een aangepaste binding maken die gebruikmaakt van een betrouwbare sessie en het HTTPS-transport. U schakelt de betrouwbare sessie imperatief in met behulp van code of declaratief in het configuratiebestand. In deze procedure worden de client- en serviceconfiguratiebestanden gebruikt om de betrouwbare sessie en het <httpsTransport-element> in te schakelen.

Het belangrijkste onderdeel van deze procedure is dat het <eindpuntconfiguratie-element> een bindingConfiguration kenmerk bevat dat verwijst naar een aangepaste bindingsconfiguratie met de naam reliableSessionOverHttps. Het <bindingsconfiguratie-element> verwijst naar deze naam om aan te geven dat een betrouwbare sessie en het HTTPS-transport worden gebruikt door <reliableSession>- en< httpsTransport-elementen> op te geven.

Zie Custom Binding Reliable Session via HTTPS voor de bronkopie van dit voorbeeld.

De service configureren met een CustomBinding voor het gebruik van een betrouwbare sessie met HTTPS

  1. Definieer een servicecontract voor het type 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. Implementeer het servicecontract in een serviceklasse. Houd er rekening mee dat het adres of de bindingsinformatie niet is opgegeven in de implementatie van de service. U hoeft geen code te schrijven om het adres of de bindingsgegevens op te halen uit het configuratiebestand.

    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. Maak een Web.config-bestand om een eindpunt te configureren voor de CalculatorService met een aangepaste binding met de naam reliableSessionOverHttps die gebruikmaakt van een betrouwbare sessie en het 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. Maak een Service.svc-bestand dat de regel bevat:

    <%@ServiceHost language=c# Service="CalculatorService" %>

  5. Plaats het bestand Service.svc in de virtuele map Internet Information Services (IIS).

De client configureren met een CustomBinding voor het gebruik van een betrouwbare sessie met HTTPS

  1. Gebruik het hulpprogramma hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe) vanaf de opdrachtregel om code te genereren op basis van servicemetagegevens.

    Svcutil.exe <Metadata Exchange (MEX) address or HTTP GET address>
    
  2. De gegenereerde client bevat de ICalculator interface die het servicecontract definieert waaraan de client-implementatie moet voldoen.

    // 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. De gegenereerde clienttoepassing bevat ook de implementatie van de ClientCalculator. Houd er rekening mee dat het adres en de bindingsinformatie niet zijn opgegeven in de implementatie van de service. U hoeft geen code te schrijven om het adres en de bindingsgegevens op te halen uit het configuratiebestand.

    // 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. Configureer een aangepaste binding met de naam reliableSessionOverHttps voor het gebruik van het HTTPS-transport en betrouwbare sessies.

    <?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. Maak een exemplaar van de ClientCalculator in een toepassing en roep vervolgens de servicebewerkingen aan.

    //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. Compileer en voer de client uit.

.NET Framework-beveiliging

Omdat het certificaat dat in dit voorbeeld wordt gebruikt, een testcertificaat is dat is gemaakt met Makecert.exe, wordt er een beveiligingswaarschuwing weergegeven wanneer u vanuit uw browser toegang probeert te krijgen tot een HTTPS-adres, zoals https://localhost/servicemodelsamples/service.svc.

Zie ook