تعداد الفاعلين الموثوق بهم في نسيج الخدمة

تتيح خدمة الفاعلون الموثوق بهم للعميل تعداد بيانات التعريف بشأن المستخدمين الذين تستضيفهم الخدمة. نظرًا لأن خدمة المستخدمين عبارة عن خدمة ذات حالة مقسمة، يتم إجراء التعداد لكل قسم. نظرًا لأن كل قسم قد يحتوي على العديد من العناصر الفاعلة، يتم إرجاع التعداد كمجموعة من النتائج المقسمة إلى صفحات. يتم تكرار الصفحات حتى تتم قراءة جميع الصفحات. يوضح المثال التالي كيفية إنشاء قائمة بجميع المستخدمين النشطين في قسم واحد من خدمة المستخدمين:

IActorService actorServiceProxy = ActorServiceProxy.Create(
    new Uri("fabric:/MyApp/MyService"), partitionKey);

ContinuationToken continuationToken = null;
List<ActorInformation> activeActors = new List<ActorInformation>();

do
{
    PagedResult<ActorInformation> page = await actorServiceProxy.GetActorsAsync(continuationToken, cancellationToken);

    activeActors.AddRange(page.Items.Where(x => x.IsActive));

    continuationToken = page.ContinuationToken;
}
while (continuationToken != null);
ActorService actorServiceProxy = ActorServiceProxy.create(
    new URI("fabric:/MyApp/MyService"), partitionKey);

ContinuationToken continuationToken = null;
List<ActorInformation> activeActors = new ArrayList<ActorInformation>();

do
{
    PagedResult<ActorInformation> page = actorServiceProxy.getActorsAsync(continuationToken);

    while(ActorInformation x: page.getItems())
    {
         if(x.isActive()){
              activeActors.add(x);
         }
    }

    continuationToken = page.getContinuationToken();
}
while (continuationToken != null);

في حين أن التعليمات البرمجية أعلاه ستسترد جميع الجهات الفاعلة في قسم معين، في بعض الأحيان ستنشأ الحاجة إلى الاستعلام عن معرفات جميع الجهات الفاعلة (نشطة أو غير نشطة) عبر كل قسم. وينبغي أن يتم ذلك عن طريق الاستثناء لأنها مهمة ثقيلة جدا.

يوضح المثال التالي كيفية الاستعلام عن أقسام الخدمة والتكرار من خلال كل منها مع المثال أعلاه لإنتاج قائمة بجميع الجهات الفاعلة النشطة وغير النشطة في الخدمة عبر تطبيق تصميم خدمة:


var serviceName = new Uri("fabric:/MyApp/MyService");

//As the FabricClient is expensive to create, it should be shared as much as possible
FabricClient fabricClient = new();

//List each of the service's partitions
ServicePartitionList partitions = await fabricClient.QueryManager.GetPartitionListAsync(serviceName);

List<Guid> actorIds = new();

foreach(var partition in partitions)
{
    //Retrieve the partition information
    Int64RangePartitionInformation partitionInformation = (Int64RangePartitionInformation)partition.PartitionInformation; //Actors are restricted to the uniform Int64 scheme per https://learn.microsoft.com/azure/service-fabric/service-fabric-reliable-actors-introduction#distribution-and-failover
    IActorService actorServiceProxy = ActorServiceProxy.Create(serviceName, partitionInformation.LowKey);
    
    ContinuationToken? continuationToken = null;
    
    do 
    {
        var page = await actorServiceProxy.GetActorsAsync(continuationToken, cancellationToken);
        actorIds.AddRange(page.Items.Select(actor => actor.ActorId.GetGuidId());
        continuationToken = page.ContinuationToken;
    } while (continuationToken != null);
}

return actorIds;

الخطوات التالية