Delen via


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.

Message security with a Windows client

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>  

Zie ook