1

WCF サービスの検出エンドポイントがあります。

私の探索クライアントでは、特定のタイプのすべてのサービスを検索する必要があります。この目的のために、スコープ機能と 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 構成を使用していないため、コード内ソリューションが必要です。

4

1 に答える 1

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();
于 2013-05-23T13:47:02.037 に答える