Aracılığıyla paylaş


Nasıl yapılır: HTTPS ile Özel Güvenilir Oturum Bağlaması Oluşturma

Bu konu, güvenilir oturumlarla Güvenli Yuva Katmanı (SSL) aktarım güvenliğinin kullanımını gösterir. HTTPS üzerinden güvenilir bir oturum kullanmak için, güvenilir bir oturum ve HTTPS aktarımı kullanan özel bir bağlama oluşturmanız gerekir. Güvenilir oturumu zorunlu olarak kod kullanarak veya yapılandırma dosyasında bildirimli olarak etkinleştirirsiniz. Bu yordam, güvenilir oturumu ve httpsTransport> öğesini etkinleştirmek için istemci ve< hizmet yapılandırma dosyalarını kullanır.

Bu prosedürün kilit kısmı, uç nokta yapılandırma öğesinin, özel bağlama yapılandırması (adı reliableSessionOverHttps<) referansı olan bir bindingConfiguration öznitelik içermesinin gerekmesidir. <bağlama> yapılandırma öğesi, <reliableSession> ve <httpsTransport> öğelerini dahil ederek güvenilir bir oturumun ve HTTPS aktarımının kullanılacağını belirtmek için bu ada başvurur.

Bu örneğin kaynak kopyası için bkz. HTTPS üzerinden Özel Bağlama Güvenilir Oturumu.

HTTPS ile güvenilir bir oturum kullanmak için hizmeti CustomBinding ile yapılandırma

  1. Hizmet türü için bir hizmet sözleşmesi tanımlayın.

    [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. Hizmet sözleşmesini bir hizmet sınıfında uygulayın. Adres veya bağlama bilgilerinin hizmetin uygulamasında belirtilmemiş olduğunu unutmayın. Yapılandırma dosyasından adres veya bağlama bilgilerini almak için kod yazmanız gerekmez.

    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. Özel bağlama adına sahip ve güvenilir bir oturum ile HTTPS aktarımı kullanan bir uç noktayı yapılandırmak için, CalculatorService ile bir Web.config dosyası oluşturun.

    <?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. Service.svc dosyasını şu satırı içerecek şekilde oluşturun:

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

  5. Service.svc dosyasını Internet Information Services (IIS) sanal dizinine yerleştirin.

İstemciyi HTTPS ile güvenilir bir oturum kullanacak şekilde CustomBinding ile yapılandırma

  1. Hizmet meta verilerinden kod oluşturmak için komut satırından ServiceModel Meta Veri Yardımcı Programı Aracı'nı (Svcutil.exe) kullanın.

    Svcutil.exe <Metadata Exchange (MEX) address or HTTP GET address>
    
  2. Oluşturulan istemci, istemci uygulamasının karşılaması gereken hizmet sözleşmesini tanımlayan ICalculator arabirimini içerir.

    // 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. Oluşturulan istemci uygulaması, ClientCalculator implementasyonunu da içerir. Adres ve bağlama bilgilerinin hizmetin uygulamasında belirtilmemiş olduğunu unutmayın. Yapılandırma dosyasından adres ve bağlama bilgilerini almak için kod yazmanız gerekmez.

    // 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. HTTPS aktarımını ve güvenilir oturumları kullanmak için adlı reliableSessionOverHttps özel bir bağlama yapılandırın.

    <?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. Bir uygulamada ClientCalculator öğesinin bir örneğini oluşturun ve ardından hizmet işlemlerini çalıştırın.

    //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({value1},{value2}) = {result}");
    
            // Call the Subtract service operation.
            value1 = 145.00D;
            value2 = 76.54D;
            result = client.Subtract(value1, value2);
            Console.WriteLine($"Subtract({value1},{value2}) = {result}");
    
            // Call the Multiply service operation.
            value1 = 9.00D;
            value2 = 81.25D;
            result = client.Multiply(value1, value2);
            Console.WriteLine($"Multiply({value1},{value2}) = {result}");
    
            // Call the Divide service operation.
            value1 = 22.00D;
            value2 = 7.00D;
            result = client.Divide(value1, value2);
            Console.WriteLine($"Divide({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. İstemciyi derleyin ve çalıştırın.

.NET Framework güvenliği

Bu örnekte kullanılan sertifika Makecert.exeile oluşturulmuş bir test sertifikası olduğundan, tarayıcınızdan gibi https://localhost/servicemodelsamples/service.svcbir HTTPS adresine erişmeye çalıştığınızda bir güvenlik uyarısı görüntülenir.

Ayrıca bkz.

  • Güvenilir Oturumlar