0

現在、アドホック サービス検出を実行して、ローカル サブネットで実行されている (不明な) サービスを検出できる WCF クライアントを使用しています。EndpointAddressユーザーがテキスト ボックスに URI を入力して使用するサービス エンドポイントを指定し、クライアントがこの URI を に解決し、その過程でサービスに関する追加のメタデータを収集する方法を実装したいと考えています。つまり、EndpointIdentityの Extensions プロパティで公開されている および追加のデータを収集する必要がありEndpointDiscoveryBehaviorます。

を使用してこれを達成しようとしていますが、プロパティDiscoveryClient.Resolve()に対して null しか受け取っていません。ResolveResponse.EndpointDiscoveryMetadata

String Address = "net.tcp://machine-name:12345/MyService"
DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
var criteria = new ResolveCriteria()
{
    Address = new EndpointAddress(Address)
};
var result = discoveryClient.Resolve(criteria);
//scv is null here.....
var svc = result.EndpointDiscoveryMetadata;

に関する情報はたくさんありますが、 についてDiscoveryClient.Find()はそれほど多くはありませんDiscoveryClient.Resolve()

だから私の質問は:

  • これは の使用目的DiscoveryClient.Resolve()ですか?
  • MetadataResolverここの方が適切ですか?
  • EndpointAddressURI を に解決し、他のメタデータを取得するにはどうすればよいですか?
4

2 に答える 2

1

私はやりたいことを次のように達成しました:

String Address = "net.tcp://machine-name:12345/MyService"
DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
var endpoint = new EndpointAddress(new Uri(Address));
var criteria = new ResolveCriteria()
{
    Address = endpoint
};
var result = discoveryClient.Resolve(criteria);

var mexClient = new MetadataExchangeClient(MetadataExchangeBindings.CreateMexTcpBinding());
var contracts = new List<ContractDescription>() { ContractDescription.GetContract(typeof(RuntimeService.Services.IWorkflowService)) };
var metaResult = MetadataResolver.Resolve(contracts, endpoint, mexClient);

var svc = metaResult.First();

拡張データにアクセスでき、正しい ID を備えた正しい EndpointAddress を提供してくれますresultsvc

私を正しい方向に押してくれた@YK1に感謝します。

于 2013-05-19T17:51:05.880 に答える