La WCF: Net.TCP liaisons multiples, même port, des Adresses IP différentes

J'ai couru dans un problème. Je suis un petit nouveau à la WCF de sorte que toute aide serait grandement appréciés.

Voici mon 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);
        }
    }

Une exception est levée sur la ligne: 'hôte.Open();'

L'exception est la suivante:

Système.InvalidOperationException
Un enregistrement existe déjà pour les URI net.tcp://192.168.1.45:4329/ServerTasks'.

Ce que je suis en train de faire est de se lier à toutes les adresses réseau sur la machine de sorte que les applications client peut accéder au service à partir de quel que soit le réseau qu'ils le voient sur. Lorsque j'exécute ce code, il trouve et tente d'établir une liaison pour environ 5 IPs différentes, y compris l'adresse 127.0.0.1.

192.168.1.45 est la deuxième adresse IP qu'il tente de lier. Au point qu'il lève l'exception que je peux voir (à l'aide de la commande netstat) que le programme est lié à la première adresse IP dans la liste sur le port 4329. Il n'y a pas quelque chose lié au port 4329 sur l'adresse mentionnée dans l'exception.

Désolé il n'y a pas beaucoup de détails, j'ai voulu donner une description concise de la poste. Si quelqu'un a besoin de plus d'info, je serai heureux de les lui fournir.

Note: j'ai essayé de réglage PortSharingEnabled à vrai pour les NetTcpBinding qui vient d'être créé à l'intérieur de la boucle foreach, mais je ressentais toujours la même erreur.

Toute aide ou conseil serait grandement appréciés!

Grâce

OriginalL'auteur Mel Green | 2009-03-31