Delen via


Procedure: Kanaalbeveiligingsreferenties opgeven

Met de WCF-service (Windows Communication Foundation) kunnen COM-toepassingen WCF-services aanroepen. Voor de meeste WCF-services moet de client referenties opgeven voor verificatie en autorisatie. Wanneer u een WCF-service aanroept vanaf een WCF-client, kunt u deze referenties opgeven in beheerde code of in een toepassingsconfiguratiebestand. Wanneer u een WCF-service aanroept vanuit een COM-toepassing, kunt u de IChannelCredentials interface gebruiken om referenties op te geven. In dit onderwerp ziet u verschillende manieren om referenties op te geven met behulp van de IChannelCredentials interface.

Notitie

IChannelCredentials is een interface op basis van IDispatch en u krijgt geen IntelliSense-functionaliteit in de Visual Studio-omgeving.

In dit artikel wordt de WCF-service gebruikt die is gedefinieerd in het voorbeeld van berichtbeveiliging.

Een clientcertificaat opgeven

  1. Voer het Setup.bat-bestand uit in de map Message Security om de vereiste testcertificaten te maken en te installeren.

  2. Open het project Message Security.

  3. Toevoegen [ServiceBehavior(Namespace="http://Microsoft.ServiceModel.Samples")] aan de ICalculator interfacedefinitie.

  4. Voeg toe bindingNamespace="http://Microsoft.ServiceModel.Samples" aan de eindpunttag in app.config voor de service.

  5. Bouw het voorbeeld van berichtbeveiliging en voer Service.exe uit. Blader naar de URI (http://localhost:8000/ServiceModelSamples/Service) van de service om ervoor te zorgen dat de service werkt.

  6. Open Visual Basic 6.0 en maak een nieuw Standard .exe-bestand. Voeg een knop toe aan het formulier en dubbelklik op de knop om de volgende code toe te voegen aan de klik-handler:

        monString = "service:mexAddress=http://localhost:8000/ServiceModelSamples/Service?wsdl"  
        monString = monString + ", address=http://localhost:8000/ServiceModelSamples/Service"  
        monString = monString + ", contract=ICalculator, contractNamespace=http://Microsoft.ServiceModel.Samples"  
        monString = monString + ", binding=BasicHttpBinding_ICalculator, bindingNamespace=http://Microsoft.ServiceModel.Samples"  
    
        Set monikerProxy = GetObject(monString)  
    
        'Set the Service Certificate.  
     monikerProxy.ChannelCredentials.SetServiceCertificateAuthentication "CurrentUser", "NoCheck", "PeerOrChainTrust"  
    monikerProxy.ChannelCredentials.SetDefaultServiceCertificateFromStore "CurrentUser", "TrustedPeople", "FindBySubjectName", "localhost"  
    
        'Set the Client Certificate.  
        monikerProxy.ChannelCredentials.SetClientCertificateFromStoreByName "CN=client.com", "CurrentUser", "My"  
        MsgBox monikerProxy.Add(3, 4)  
    
  7. Voer de Visual Basic-toepassing uit en controleer de resultaten.

    In de Visual Basic-toepassing wordt een berichtvak weergegeven met het resultaat van het aanroepen van Add(3, 4). SetClientCertificateFromFile(String, String, String) of SetClientCertificateFromStoreByName(String, String, String) kan ook worden gebruikt in plaats van SetClientCertificateFromStore(String, String, String, Object) het clientcertificaat in te stellen:

    monikerProxy.ChannelCredentials.SetClientCertificateFromFile "C:\MyClientCert.pfx", "password", "DefaultKeySet"  
    

Notitie

Deze aanroep werkt alleen als het clientcertificaat wordt vertrouwd op de computer waarop de client wordt uitgevoerd.

Notitie

Als de moniker ongeldig is of als de service niet beschikbaar is, retourneert de aanroep GetObject een fout met de tekst 'Ongeldige syntaxis'. Als u deze fout ontvangt, controleert u of de moniker die u gebruikt juist is en of de service beschikbaar is.

Gebruikersnaam en wachtwoord opgeven

  1. Wijzig het Service App.config-bestand om het wsHttpBindingte gebruiken. Dit is vereist voor validatie van gebruikersnaam en wachtwoord:

  2. Stel de in op clientCredentialType UserName:

  3. Open Visual Basic 6.0 en maak een nieuw Standard .exe-bestand. Voeg een knop toe aan het formulier en dubbelklik op de knop om de volgende code toe te voegen aan de klik-handler:

    monString = "service:mexAddress=http://localhost:8000/ServiceModelSamples/Service?wsdl"  
    monString = monString + ", address=http://localhost:8000/ServiceModelSamples/Service"  
    monString = monString + ", contract=ICalculator, contractNamespace=http://Microsoft.ServiceModel.Samples"  
    monString = monString + ", binding=WSHttpBinding_ICalculator, bindingNamespace=http://Microsoft.ServiceModel.Samples"  
    
    Set monikerProxy = GetObject(monString)  
    
    monikerProxy.ChannelCredentials.SetServiceCertificateAuthentication "CurrentUser", "NoCheck", "PeerOrChainTrust"  
    monikerProxy.ChannelCredentials.SetUserNameCredential "username", "password"  
    
    MsgBox monikerProxy.Add(3, 4)  
    
  4. Voer de Visual Basic-toepassing uit en controleer de resultaten. In de Visual Basic-toepassing wordt een berichtvak weergegeven met het resultaat van het aanroepen van Add(3, 4).

    Notitie

    De binding die is opgegeven in de service moniker in dit voorbeeld, is gewijzigd in WSHttpBinding_ICalculator. Houd er ook rekening mee dat u een geldige gebruikersnaam en wachtwoord moet opgeven in de aanroep naar SetUserNameCredential(String, String).

Windows-referenties opgeven

  1. Instellen clientCredentialType op Windows in het Service App.config-bestand:

  2. Open Visual Basic 6.0 en maak een nieuw Standard .exe-bestand. Voeg een knop toe aan het formulier en dubbelklik op de knop om de volgende code toe te voegen aan de klik-handler:

    monString = "service:mexAddress=http://localhost:8000/ServiceModelSamples/Service?wsdl"  
    monString = monString + ", address=http://localhost:8000/ServiceModelSamples/Service"  
    monString = monString + ", contract=ICalculator, contractNamespace=http://Microsoft.ServiceModel.Samples"  
    monString = monString + ", binding=WSHttpBinding_ICalculator, bindingNamespace=http://Microsoft.ServiceModel.Samples"  
    monString = monString + ", upnidentity=domain\userID"  
    
    Set monikerProxy = GetObject(monString)  
     monikerProxy.ChannelCredentials.SetWindowsCredential "domain", "userID", "password", 1, True  
    
    MsgBox monikerProxy.Add(3, 4)  
    
  3. Voer de Visual Basic-toepassing uit en controleer de resultaten. In de Visual Basic-toepassing wordt een berichtvak weergegeven met het resultaat van het aanroepen van Add(3, 4).

    Notitie

    U moet 'domein', 'userID' en 'password' vervangen door geldige waarden.

Een probleemtoken opgeven

  1. Uitgiftetokens worden alleen gebruikt voor toepassingen die federatieve beveiliging gebruiken. Zie Federatieve en uitgegeven tokens en federatievoorbeelden voor meer informatie over federatieve beveiliging.

    In het volgende Visual Basic-codevoorbeeld ziet u hoe u de SetIssuedToken(String, String, String) methode aanroept:

        monString = "service:mexAddress=http://localhost:8000/ServiceModelSamples/Service?wsdl"  
        monString = monString + ", address=http://localhost:8000/SomeService/Service"  
        monString = monString + ", contract=ICalculator, contractNamespace=http://SomeService.Samples"  
        monString = monString + ", binding=WSHttpBinding_ISomeContract, bindingNamespace=http://SomeService.Samples"  
    
        Set monikerProxy = GetObject(monString)  
    monikerProxy.SetIssuedToken("http://somemachine/sts", "bindingType", "binding")  
    

    Zie SetIssuedToken(String, String, String)voor meer informatie over de parameters voor deze methode.

Zie ook