Hallo!
Ich habe im WCF ein "Multibinding" erstellt, welches an mehreren IP's horcht.
Wenn ich auf dem selben Rechner via IPv4 zu dem Service verbinde, funktioniert alles einwandfrei. Verwende ich stattdessen IPv6, bekomme ich jedesmal die Fehlermeldung "Der Aufrufer wurde vom Dienst nicht authentifiziert." (Windows-Authentifizierung ist fehlgeschlagen).
Mein Binding sieht wie folgend aus:
NetTcpBinding binding = new NetTcpBinding();
// Buffered Mode
binding.TransferMode = TransferMode.Buffered;
// ClientZertifikat deaktivieren
binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.None;
// WinAuth und Verschlüsselung
binding.Security.Mode = SecurityMode.TransportWithMessageCredential;
binding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign;
binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
// Sessions aktivieren
binding.ReliableSession.Enabled = true;
binding.ReliableSession.InactivityTimeout = TimeSpan.FromSeconds(30);
// Größen einstellen
binding.MaxBufferSize = int.MaxValue;
binding.MaxReceivedMessageSize = int.MaxValue;
binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
binding.ReaderQuotas.MaxBytesPerRead = int.MaxValue;
binding.ReaderQuotas.MaxDepth = int.MaxValue;
binding.ReaderQuotas.MaxNameTableCharCount = int.MaxValue;
binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
// Timeouts
binding.ReceiveTimeout = TimeSpan.FromSeconds(30);
binding.SendTimeout = TimeSpan.FromSeconds(30);
binding.CloseTimeout = TimeSpan.FromSeconds(10);
binding.OpenTimeout = TimeSpan.FromSeconds(10);
Als URI wird folgende verwendet:
string.Format("net.tcp://{0}:{1}/TestService/ClientService", System.Net.Dns.GetHostName(), this.settings.Port)
Ich kann mir nicht erklären, warum es auf einer IP geht, auf einer anderen aber nicht. Die Einstellungen bleiben ja die gleichen.
Hat vielleicht jemand schonmal dieses Problem gehabt, oder gibt es beim Multibinding irgendwelche Einschränkungen?
Mit freundlichen Grüßen
Felix
Vielleicht liegt es an der falschen Adresse, wenn du IPV6 verwendest
net.tcp://[ipv6-adresse]:port/ClientService.
Die IP muss in eckige Klammern, damit eindeutig ist, welche teile zur IP, und welche zum Port gehören
Für das Multibinding (An mehreren Adressen), ist es beim net.tcp Binding nötigt, keine IP-Adresse anzugeben, sondern eben den Hostname.
Dies verwende ich extra aus diesem Grund.
Der String lautet also "net.tcp://TestRechner:1234/ClientService". Daher kann auch kein Fehler bei der Angabe der IP passieren.
Mit freundlichen Grüßen
Felix