Berichtbeveiliging met een Windows-client
In dit scenario ziet u een WCF-client (Windows Communication Foundation) en -server die wordt beveiligd door de berichtbeveiligingsmodus. De client en service worden geverifieerd met behulp van Windows-referenties.
Characteristic | Beschrijving |
---|---|
Beveiligingsmodus | Bericht |
Interoperabiliteit | Alleen WCF |
Verificatie (server) | Wederzijdse verificatie van de server en client |
Verificatie (client) | Wederzijdse verificatie van de server en client |
Integriteit | Ja, gedeelde beveiligingscontext gebruiken |
Vertrouwelijkheid | Ja, gedeelde beveiligingscontext gebruiken |
Transport | NET. TCP |
Binding | NetTcpBinding |
Service
De volgende code en configuratie zijn bedoeld om onafhankelijk van elkaar te worden uitgevoerd. Voer een van de volgende stappen uit:
Maak een zelfstandige service met behulp van de code zonder configuratie.
Maak een service met behulp van de opgegeven configuratie, maar definieer geen eindpunten.
Code
De volgende code laat zien hoe u een service-eindpunt maakt dat gebruikmaakt van berichtbeveiliging om een beveiligde context met een Windows-computer tot stand te brengen.
// 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()
Configuratie
De volgende configuratie kan worden gebruikt in plaats van de code om de service in te stellen:
<?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>
Klant
De volgende code en configuratie zijn bedoeld om onafhankelijk van elkaar te worden uitgevoerd. Voer een van de volgende stappen uit:
Maak een zelfstandige client met behulp van de code (en clientcode).
Maak een client die geen eindpuntadressen definieert. Gebruik in plaats daarvan de clientconstructor die de configuratienaam als argument gebruikt. Voorbeeld:
CalculatorClient cc = new CalculatorClient("EndpointConfigurationName");
Dim cc As New CalculatorClient("EndpointConfigurationName")
Code
Met de volgende code wordt een client gemaakt. De binding is beveiliging in de berichtenmodus en het clientreferentietype is ingesteld op Windows
.
// 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
Configuratie
De volgende configuratie wordt gebruikt om de clienteigenschappen in te stellen.
<?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>