Descoberta WCF com hosts de serviço usando net.tcp: //0.0.0.0: 0 / blah anuncia net.tcp: //0.0.0.0: 0 / blah
Eu queria um serviço detectável que ouvisse todas as interfaces e publicasse anúncios de descoberta para cada interface. Eu estava esperando poder configurar isso no arquivo de configuração usando tcp: //0.0.0.0: 0 / blah como o terminal de serviço. Mas quando eu executo o código abaixo, os anúncios que ele envia usam tcp: //0.0.0.0: 0 / blah como o EndpointAddress que é inútil para os clientes.
Eu quero receber anúncios para cada endpoint derivado de tcp: / / 0.0.0.0: 0 / blah e eu preferiria usar um arquivo de configuração e não uma configuração de host de serviço programático como abaixo. Alguma idéia para uma solução alternativa?
[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();
}