【发布时间】:2013-06-05 18:48:32
【问题描述】:
我想要一个可以侦听所有接口并为每个接口发布发现公告的可发现服务。我希望最终能够使用 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();
}
【问题讨论】:
-
你能让你的例子更清楚吗? serviceHost2 在与第一个服务相同的端口上注册相同的 IContract 有什么意义?什么是“discoveryBehaviour”、“serviceDiscoveryBehaviour”等...
-
@Nenad 为清楚起见已编辑。额外的服务主机用于测试与问题无关的内容,因此我将其删除。 discoveryUri 和announcementUri 是你想要使用的任何东西。由于 WCF 网络风暴错误support.microsoft.com/kb/2777305,您无法使它们相同。 :)
-
嘿,@insipid,考虑看我的答案吗?我在自己的程序中使用它取得了巨大的成功。
标签: c# .net wcf web-services ws-discovery