WCF: Net.TCP mehrere Bindungen, gleicher port, andere IP-Adressen

Habe ich ein problem. Ich bin ein wenig neu auf der WCF, so dass jede Hilfe wäre sehr appreaciated.

Hier ist mein code:

public static void StartHosts()
    {
        try
        {
            //Create a new host
            ServiceHost host = new ServiceHost(typeof(ServerTasks));

            List<IPAddress> ips = new List<IPAddress>(Dns.GetHostAddresses(Dns.GetHostName()));
            if (IPAddress.Loopback != null)
                ips.Add(IPAddress.Loopback);

            ips.RemoveAll(i => i.AddressFamily != AddressFamily.InterNetwork);

            foreach (var ip in ips)
            {
                string uri = string.Empty;

                //Formulate the uri for this host
                uri = string.Format(
                    "net.tcp://{0}:{1}/ServerTasks",
                    ip.ToString(),
                    ServerSettings.Instance.TCPListeningPort
                );


                //Add the endpoint binding
                host.AddServiceEndpoint(
                    typeof(ServerTasks),
                    new NetTcpBinding(SecurityMode.Transport) { TransferMode = TransferMode.Streamed },
                    uri
                );

            }



            //Add the meta data publishing
            var smb = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
            if (smb == null)
                smb = new ServiceMetadataBehavior();

            smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
            host.Description.Behaviors.Add(smb);

            host.AddServiceEndpoint(
                ServiceMetadataBehavior.MexContractName,
                MetadataExchangeBindings.CreateMexTcpBinding(),
                "net.tcp://localhost/ServerTasks/mex"
            );

            //Run the host
            host.Open();
        }
        catch (Exception exc)
        {
            DebugLogger.WriteException(exc);
        }
    }

Wird eine Ausnahme ausgelöst, auf die Zeile: "host.Open();'

Ausnahme ist:

System.InvalidOperationException
Eine Registrierung bereits vorhanden ist, für URI 'net.tcp://192.168.1.45:4329/ServerTasks'.

Was ich versuche zu tun, ist binden, um alle Netzwerk-Adressen auf der Maschine, so dass die client-Anwendungen erreichen können, ist der service, von welchem Netzwerk Sie sehen es auf. Wenn ich diesen code ausführen, die es findet, und versuche, eine Bindung für über 5 verschiedene IPs, einschließlich 127.0.0.1.

192.168.1.45 ist die zweite IP, die er versucht zu binden. An dem Punkt, dass es wirft die Ausnahme, die ich sehen kann (mit netstat), die das Programm gebunden ist, um die erste IP in der Liste auf port 4329. Es gibt nichts gebunden-port 4329 auf der genannten Adresse in der Ausnahme.

Sorry es gibt nicht viele details, ich wollte einen prägnanten Beitrag. Wenn jemand braucht mehr info, werde ich Sie gerne liefern.

Hinweis: ich habe versucht Einstellung PortSharingEnabled auf true für das NetTcpBinding, die angelegt wird, in der foreach-Schleife, aber ich erlebte die gleichen Fehler.

Jede Hilfe oder Beratung wäre sehr appreaciated!

Dank

InformationsquelleAutor Mel Green | 2009-03-31
Schreibe einen Kommentar