wenn ich folgende zeile in meinem Aerver hinzufüge:
tcpBinding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
bekomme ich folgende fehlermeldung:
Der ChannelDispatcher bei "net.tcp://localhost:8777/MyProdService" mit den Verträgen ""IServerFunktionen"" kann seinen IChannelListener nicht öffnen.
der rest vom code:
//Neuen Server erzeugen aus der Klasse classServerFunktionen
ServiceHost myHost = new ServiceHost(typeof(classServerFunktionen));
//Wie wird zu dem Server verbunden, welches Interface nutz er?
NetTcpBinding tcpBinding = new NetTcpBinding();
tcpBinding.TransactionFlow = false;
tcpBinding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign;
tcpBinding.Security.Mode = SecurityMode.Message;
tcpBinding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
myHost.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = System.ServiceModel.Security.UserNamePasswordValidationMode.Custom;
myHost.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new CustomUserNameValidator();
myHost.AddServiceEndpoint(typeof(IServerFunktionen), tcpBinding, "net.tcp://localhost:8777/MyProdService");
//Server starten
myHost.Open();
cSharp Projekte : https://github.com/jogibear9988
Hab nun alles probiert.
Wenn man tcpBinding.Security.Message.ClientCredentialType = MessageCredentialType.UserName; auskommentier läuft er, aber zur Userathentifizierung muss dieses ja dazu!
cSharp Projekte : https://github.com/jogibear9988
Ich habe genau das selbe Problem, obwohl ich wsHttpBinding statt netTCPBinding verwende.
Sogar wenn ich für die Prüffunktion
myServiceHost.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = UserNamePasswordValidator.None;
verwende, kommt es zu dieser Fehlermeldung.
In der eingebetteten Exception steht dann aber sogar der genaue Grund:
The service certificate is not provided. Specify a service certificate in ServiceCredentials.
Source: CreateServerX509TokenProvider()
Nur ich habe meines Wissens nirgends etwas eingestellt, was ein X.509-Zertifikat nötig machen würde.
Muß man dies vielleicht irgendwo explizit ausschalten oder kann man die ClientCredentials bei MessageClientCredentialType=UserName nur per Zertifikat mitgeben?
Sehr, sehr komplex die Authentifizierungsmöglichkeiten mit WCF.