2010-11-22 6 views
0

Ich habe sowohl einen WCF-Client als auch einen Remote-Internet-WCF-Server geschrieben.C#: Methode zum Hinzufügen der WCF-Authentifizierung, Benutzername + SSL?

Auf dem WCF-Remoteserver wird WPF ausgeführt, das in einem herkömmlichen Windows-Dienstwrapper (d. H. Nicht IIS) gehostet wird.

Derzeit funktioniert es perfekt mit grundlegenden HTTP-Bindung. Ich verwende Visual Studio 2010 + .NET 4.0 + C#.

Kann mir jemand in die Richtung der richtigen Schritte zeigen, um meinen Code zu ändern, so dass ich Benutzername + SSL-Authentifizierung hinzufügen kann?

EDIT:

Im Dienst Ende habe ich außer Kraft gesetzt UserNamePasswordValidator wie folgt:

public class CustomUserNameValidator : UserNamePasswordValidator 
{ 
    public override void Validate(string userName, string password) 
    { 
    Console.WriteLine("Got to here"); 
    } 
} 

Im Dienst Ende habe ich einen Link zu dem Benutzernamen Prüfklasse angegeben haben:

ServiceHost serviceHost = new ServiceHost(typeof(PhiFeedServer.PhiFeed)); // ,baseAddress); 

    const bool passswordAuthentication = true; 
    if (passswordAuthentication) 
    { 
    // These two lines switch on username/password authentication (see custom class "CustomUserNameValidator" in common file PhiFeed.svc.cs) 
    // See http://msdn.microsoft.com/en-us/library/aa354513.aspx 
    serviceHost.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom; 
    serviceHost.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new CustomUserNameValidator(); 
    } 

    // Start the service 
    serviceHost.Open(); 

Auf der Client-Seite:

EndpointAddress endpointAddress = new EndpointAddress("http://localhost:20000/PhiFeed?wdsl"); 
    BasicHttpBinding serviceBinding = new BasicHttpBinding(); 
    serviceBinding.ReceiveTimeout = new TimeSpan(0, 0, 120); 
    proxy = new PhiFeedClient(serviceBinding, endpointAddress); 

    proxy.ClientCredentials.UserName.UserName = "myusername"; 
    proxy.ClientCredentials.UserName.Password = "mypassword"; 

Wenn ich jedoch alles ausführe, ruft es nie den Benutzernamen validator - was ist los?

+0

funktioniert es auf basichttp? Ich würde persönlich wsHttpBinding oder net.tcp Bindung bevorzugen. weil Sie das Zertifikat damit verwenden können :). es wäre dann gesichert – user507779

+0

Meine aktuelle Einrichtung verwendet wsHttpBinding, so dass es ein Zertifikat verwenden kann. Der obige Code funktionierte nicht richtig. – Contango

Antwort

1

Aha! Ich habe die Lösung für mein Problem gefunden.

Microsoft bietet Beispielcode, der zeigt, wie Sie Benutzername/Passwort + SSL-Authentifizierung zu einer Konsolenanwendung hinzufügen.

Suche nach "Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Die Proben für die .NET Framework 4", herunterladen, entpacken in C :, dann die Probe laufen hier:

C: \ WF_WCF_Samples \ WCF \ Extensibility \ Security \ UserNamePasswordValidator \ CS

Verwandte Themen