Я использую Azure Service Fabric с услугами без состояния. У меня есть список служб, развернутых в приложении, и есть соглашение об именах, используемое с этими именами служб. Я хотел бы получить список служб, соответствующих выражению фильтра.Как вы используете службуNameFilter при вызове QueryClient.GetServiceListAsync
Вот ссылка на скриншот моей исследовательской ткани. У меня нет точек репутации, чтобы опубликовать изображение.
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 службы, который вы ищете?
Спасибо за любую помощь, которую вы можете предоставить!