WCF descubrimiento con hosts de servicio utilizando net.tcp: //0.0.0.0: 0 / blah anuncia net.tcp: //0.0.0.0: 0 / blah

Quería un servicio detectable que escuchara en todas las interfaces y publicara anuncios de descubrimiento para cada interfaz. Esperaba poder finalmente configurar esto en el archivo de configuración usando tcp: //0.0.0.0: 0 / blah como el punto final del servicio. Pero cuando ejecuto el siguiente código, los anuncios que envía usan tcp: //0.0.0.0: 0 / blah como EndpointAddress, que es inútil para los clientes.

Quiero recibir anuncios para cada punto final derivado de tcp: //0.0.0.0: 0 / blah y preferiría usar un archivo de configuración y no una configuración de host de servicio programático como la que se muestra a continuación. ¿Alguna idea para una solución?

    [TestFixtureSetUp]
    public void SetUp()
    {
        service1 = new MyContract();
        EndpointDiscoveryBehavior discoveryBehavior = new EndpointDiscoveryBehavior();
        ServiceDiscoveryBehavior serviceDiscoveryBehavior = new ServiceDiscoveryBehavior(discoveryUri);
        serviceDiscoveryBehavior.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint(announcementUri));

        serviceHost1 = new ServiceHost(service1,
            new Uri[] {new Uri("net.pipe://localhost"), new Uri("net.tcp://0.0.0.0:0")});
        ServiceEndpoint localEndpoint1 = serviceHost1.AddServiceEndpoint(typeof (IContract),
            new NetNamedPipeBinding(),
            "/Pipe");
        ServiceEndpoint localEndpoint2 = serviceHost1.AddServiceEndpoint(typeof (IContract),
            new NetTcpBinding(),
            "/Tcp");
        localEndpoint2.Behaviors.Add(discoveryBehavior);
        serviceHost1.Description.Behaviors.Add(serviceDiscoveryBehavior);
        serviceHost1.AddServiceEndpoint(new UdpDiscoveryEndpoint(discoveryUri));

        serviceHost1.Open();
    }

Respuestas a la pregunta(2)

Su respuesta a la pregunta