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();
}