0

複数の WCF サービスを使用する必要がある Silverlight アプリケーションがあります。サービスのエンドポイント (url) は、Silverlight アプリケーションまたは構成ファイル内にハードコーディングできません。それらは、それ自体が WCF サービスである Service Registry から照会する必要があります。問題は、実際のサービス プロキシのインスタンスを作成する前に、非同期呼び出しを使用してサービス エンドポイントをクエリする必要があることです。応答を待つか、実際のサービスへの呼び出しをブロックする良い方法が思いつきません。Silverlight アプリケーションで Service Registry / Service Locator パターンを使用する最良の方法は何ですか?

var registry = new ServiceRegistryClient("http://localhost/ServiceRegistry.svc");
string url;

registry.GetServiceCompleted += (s, e) => url = e.Result;
registry.GetServiceAsync("MyService");

// now I want to create MyService, but I must wait somehow until url is returned
var myService = new MyServiceClient(url);
myService.DoSomethingAsync();
4

1 に答える 1

0

レジストリからルックアップをキャッシュするか、サービスと通信するたびにルックアップを実行できます(通常は推奨されません)。

提供したコードスニペットでは、GetServiceCompletedイベントをサブスクライブしています。ルックアップをキャッシュするか、サービスへの呼び出しを開始する必要があるのは、ハンドラー(この場合はラムダ式)ですらあります。

HTH、

--larsw

于 2009-11-03T07:19:03.387 に答える