Aracılığıyla paylaş


Windows İstemcisi ile İleti Güvenliği

Bu senaryoda, ileti güvenlik modu tarafından güvenliği sağlanan bir Windows Communication Foundation (WCF) istemcisi ve sunucusu gösterilir. İstemci ve hizmetin kimliği Windows kimlik bilgileri kullanılarak doğrulanır.

Message security with a Windows client

Characteristic Açıklama
Güvenlik Modu İleti
Birlikte çalışabilirlik Yalnızca WCF
Kimlik Doğrulaması (Sunucu) Sunucu ve istemcinin karşılıklı kimlik doğrulaması
Kimlik Doğrulaması (İstemci) Sunucu ve istemcinin karşılıklı kimlik doğrulaması
Bütünlük Evet, paylaşılan güvenlik bağlamı kullanma
Gizlilik Evet, paylaşılan güvenlik bağlamı kullanma
Taşıma NET. TCP
Bağlama NetTcpBinding

Hizmet

Aşağıdaki kod ve yapılandırma bağımsız olarak çalıştırılacaktır. Aşağıdakilerden birini yapın:

  • Yapılandırma olmadan kodu kullanarak tek başına bir hizmet oluşturun.

  • Sağlanan yapılandırmayı kullanarak bir hizmet oluşturun, ancak hiçbir uç nokta tanımlamayın.

Kod

Aşağıdaki kod, Windows makinesiyle güvenli bir bağlam oluşturmak için ileti güvenliğini kullanan bir hizmet uç noktasının nasıl oluşturulacağını gösterir.

// Create the binding.
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Message;
binding.Security.Message.ClientCredentialType =
    MessageCredentialType.Windows;

// Create the URI for the endpoint.
Uri netTcpUri = new Uri("net.tcp://localhost:8008/Calculator");

// Crate the service host and add an endpoint.
ServiceHost myServiceHost = new ServiceHost
    (typeof(Calculator), netTcpUri);
myServiceHost.AddServiceEndpoint(
    typeof(ICalculator), binding, "");

// Open the service.
myServiceHost.Open();
Console.WriteLine("Listening ....");
Console.ReadLine();

// Close the service.
myServiceHost.Close();
' Create the binding.
Dim binding As New NetTcpBinding()
binding.Security.Mode = SecurityMode.Message
binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows

' Create the URI for the endpoint.
Dim netTcpUri As New Uri("net.tcp://localhost:8008/Calculator")

' Crate the service host and add an endpoint.
Dim myServiceHost As New ServiceHost(GetType(ServiceModel.Calculator), netTcpUri)
myServiceHost.AddServiceEndpoint(GetType(ICalculator), binding, "")

' Open the service.
myServiceHost.Open()
Console.WriteLine("Listening ....")
Console.ReadLine()

' Close the service.
myServiceHost.Close()

Yapılandırma

Hizmeti ayarlamak için kod yerine aşağıdaki yapılandırma kullanılabilir:

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
  <system.serviceModel>  
    <services>  
      <service behaviorConfiguration=""  
               name="ServiceModel.Calculator">  
        <endpoint address="net.tcp://localhost:8008/Calculator"  
                  binding="netTcpBinding"  
                  bindingConfiguration="Windows"  
                  name="WindowsOverMessage"  
                  contract="ServiceModel.ICalculator" />  
      </service>  
    </services>  
    <bindings>  
      <netTcpBinding>  
        <binding name="Windows">  
          <security mode="Message">  
            <message clientCredentialType="Windows" />  
          </security>  
        </binding>  
      </netTcpBinding>  
    </bindings>  
    <client />  
  </system.serviceModel>  
</configuration>  

İstemci

Aşağıdaki kod ve yapılandırma bağımsız olarak çalıştırılacaktır. Aşağıdakilerden birini yapın:

  • Kodu (ve istemci kodunu) kullanarak tek başına bir istemci oluşturun.

  • Hiçbir uç nokta adresi tanımlamayan bir istemci oluşturun. Bunun yerine, yapılandırma adını bağımsız değişken olarak alan istemci oluşturucuyu kullanın. Örneğin:

    CalculatorClient cc = new CalculatorClient("EndpointConfigurationName");
    
    Dim cc As New CalculatorClient("EndpointConfigurationName")
    

Kod

Aşağıdaki kod bir istemci oluşturur. Bağlama, İleti modu güvenliğine ve istemci kimlik bilgisi türü olarak Windowsayarlanır.

// Create the binding.
NetTcpBinding myBinding = new NetTcpBinding();
myBinding.Security.Mode = SecurityMode.Message;
myBinding.Security.Message.ClientCredentialType =
    MessageCredentialType.Windows;

// Create the endpoint address.
EndpointAddress ea = new
    EndpointAddress("net.tcp://machineName:8008/Calculator");

// Create the client.
CalculatorClient cc =
    new CalculatorClient(myBinding, ea);

// Begin using the client.
try
{
    cc.Open();
    Console.WriteLine(cc.Add(200, 1111));
    Console.ReadLine();

    // Close the client.
    cc.Close();
}
' Create the binding.
Dim myBinding As New NetTcpBinding()
myBinding.Security.Mode = SecurityMode.Message
myBinding.Security.Message.ClientCredentialType = MessageCredentialType.Windows

' Create the endpoint address.
Dim ea As New EndpointAddress("net.tcp://machineName:8008/Calculator")

' Create the client.
Dim cc As New CalculatorClient(myBinding, ea)

' Begin using the client.
Try
    cc.Open()

    Console.WriteLine(cc.Add(100, 11))
    Console.ReadLine()

    ' Close the client.
    cc.Close()
Catch tex As TimeoutException
    Console.WriteLine(tex.Message)
    cc.Abort()
Catch cex As CommunicationException
    Console.WriteLine(cex.Message)
    cc.Abort()
Finally
    Console.WriteLine("Closed the client")
    Console.ReadLine()
End Try

Yapılandırma

İstemci özelliklerini ayarlamak için aşağıdaki yapılandırma kullanılır.

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
  <system.serviceModel>  
    <bindings>  
      <netTcpBinding>  
        <binding name="NetTcpBinding_ICalculator" >  
         <security mode="Message">  
            <message clientCredentialType="Windows" />  
          </security>  
        </binding>  
      </netTcpBinding>  
    </bindings>  
    <client>  
      <endpoint address="net.tcp://machineName:8008/Calculator"
                binding="netTcpBinding"  
                bindingConfiguration="NetTcpBinding_ICalculator"  
                contract="ICalculator"  
                name="NetTcpBinding_ICalculator">
      </endpoint>  
    </client>  
  </system.serviceModel>  
</configuration>  

Ayrıca bkz.