在代码中添加范围和扩展到端点

时间:2013-05-23 12:51:51

标签: c# .net wcf wcf-binding wcf-security

我的WCF服务有一个发现端点。

在我的发现客户端中,我需要搜索特定类型的所有服务。 为此,我正在考虑使用Scope功能和WCF服务元数据扩展。

// Create DiscoveryClient
DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
// Find ICalculatorService endpoints            
FindCriteria findCriteria = new FindCriteria(typeof(IAgent));
findCriteria.Duration = TimeSpan.FromSeconds(5);
findCriteria.Scopes.Add(new Uri("net.tcp://cybertech.com/CallTesting/AgentService/1/Cisco"));
FindResponse findResponse = discoveryClient.Find(findCriteria);

是否可以在代码中配置Scope和Extensions等服务端点元数据。 如果是,那API是什么?我在互联网上找不到太多东西。

我需要代码内解决方案,因为我在托管服务代码而我没有使用XML配置。

1 个答案:

答案 0 :(得分:2)

找到将其添加到代码中的解决方案:

var address = CommonMethods.GetIpLocalAddress();

            _host = new ServiceHost(typeof(AgentService), new Uri(string.Format("net.tcp://{0}/AgentService", address)));

            var endpoint = _host.AddServiceEndpoint(typeof(IAgent), new NetTcpBinding(), String.Empty);

            var metadataProvider = new CiscoMetaDataProvider();

            var discoveryBehavior = new EndpointDiscoveryBehavior();
            discoveryBehavior.Scopes.Add(new Uri("net.tcp://blablabla.com/CallTesting/AgentService/1/Cisco"));
            discoveryBehavior.Extensions.Add(new XElement("phoneNumber", metadataProvider.GetPhoneNumber()));

            endpoint.Behaviors.Add(discoveryBehavior);

            var discoveryEndpoint = new UdpDiscoveryEndpoint();

            _host.AddServiceEndpoint(discoveryEndpoint);

            ServiceDiscoveryBehavior serviceDiscoveryBehavior = new ServiceDiscoveryBehavior();

            serviceDiscoveryBehavior.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint());

            _host.Description.Behaviors.Add(serviceDiscoveryBehavior);

            _host.Open();