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.
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 Windows
ayarlanı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>