私は、ステートレスサービスでAzureサービスファブリックを使用しています。私はアプリケーションの下にデプロイされたサービスのリストを持っており、それらのサービス名で使われる命名規則があります。フィルタ式と一致するサービスの一覧を取得したいと思います。QueryClient.GetServiceListAsyncを呼び出すときにserviceNameFilterを使用する方法
ここに、私のサービスファブリックエクスプローラのスクリーンショットへのリンクがあります。私はイメージを投稿する評判のポイントがありません。この例では
Service Fabric Explorer screenshot
、自分のアプリケーションの名前はSFApp1あり、そして私のサービスの名前はHelloWorldStatelessです。私はサービスファブリッククラスターに問い合わせて、 "HelloWorldSt *"という名前のサービス(もちろんSFApp1アプリケーションの下にある)を探したいと思います。
私はアプリケーション名 "fabric:/ SFApp1"を持つすべてのサービスを検索することができますが、そのアプリケーションの下にあるすべてのサービスを返します。 GetServiceListAsyncのこのオーバーロードは、アプリケーションURIだけを取ります。
FabricClient client = new FabricClient();
ServiceList serviceList = client.QueryManager.GetServiceListAsync(new Uri("fabric:/SFApp1")).Result;
また、私は特定のサービスを見つけるために問い合わせることができます。このオーバーロードでは、アプリケーションURIとサービスURIが使用され、単一項目リストが返されます。
FabricClient client = new FabricClient();
ServiceList serviceList = client.QueryManager.GetServiceListAsync(new Uri("fabric:/SFApp1"), new Uri("fabric:/SFApp1/HelloWorldStateless")).Result;
私が見つけようとしているのは、ワイルドカード検索のような方法があるかどうかです。
FabricClient client = new FabricClient();
ServiceList serviceList = client.QueryManager.GetServiceListAsync(new Uri("fabric:/SFApp1"), new Uri("fabric:/SFApp1/HelloWorldSt*")).Result;
サービス名を指定するパラメータの名前はserviceNameFilterであり、このメソッドはリストを返します。私は結果が常に単一項目リストになる場合、なぜこの過負荷のリストを返すのだろうと思っています。また、パラメータ名 "serviceNameFilter"は、あなたのリストを絞り込むための何らかの表現を提供する能力があることを(少なくとも私に)示唆しています。
ここで私はすでに試したことがあります。上記のコードを試してみましたが、ここでいくつかの文字を切り捨ててアスタリスクを入れます。アスタリスクなしで試して、部分文字列の一致であるかどうかを確認しました。私はパーセント記号でSQLスタイルを試しました。私は疑問符を試みました。これらの試行はすべて空のリストを返しました。
私の現在の回避策は、そのアプリケーションの下にあるすべてのサービスを尋ねるだけです。クライアントコードの最後にlinq式でフィルタリングします。それはうまくいくだろうが、私のサービスのリストが本当に大きくなったら、私はパフォーマンスについて心配している。
ソースコードを調べて自分自身に答えることができればいいですか?
"serviceNameFilter"の意味を誤解していますか?探しているサービスURI全体を入れなければならないということですか?
ご協力いただきありがとうございます!