Обнаружение WCF с хостами службы с использованием net.tcp: //0.0.0.0: 0 / blah объявляет net.tcp: //0.0.0.0: 0 / blah
Мне нужен был обнаруживаемый сервис, который прослушивал бы все интерфейсы и публиковал объявления об обнаружении для каждого интерфейса. Я надеялся, что смогу в конечном итоге просто настроить это в файле конфигурации, используя tcp: //0.0.0.0: 0 / blah в качестве конечной точки службы. Но когда я запускаю приведенный ниже код, отправляемые им объявления используют tcp: //0.0.0.0: 0 / blah в качестве EndpointAddress, который бесполезен для клиентов.
Я хочу получать объявления для каждой конечной точки, полученной из tcp: //0.0.0.0: 0 / blah, и я бы предпочел использовать файл конфигурации, а не установку программного узла службы, как показано ниже. Есть идеи для обхода?
[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();
}