J'ai un IActor
que je veux appeler pour faire un calcul simple basé sur des rappels. Il s'appelle ainsi:
var actorId = new ActorId($"item_{resp.ResultValue.Id}");
var scheduler = ActorProxy.Create<IScheduler>(actorId, ITEM_SCHEDUER_URI);
try
{
await scheduler.SetupReminderAsync(new ItemInformation()
{
EntityId = entityId.ToString(),
Date = resp.ResultValue.AutoResolveOn
}).ConfigureAwait(false);
}
Cependant, chaque fois que la méthode SetupReminderAsync
est appelée, j'obtiens une exception HRESULT: 0x80071BCD: Service does not exist
. Je ne suis pas sûr de ce que cela signifie car je peux clairement voir le service de l'acteur tourner en mode débogage. Je pourrais vraiment utiliser quelques conseils sur ce qui se passe. Merci!
3 réponses
Il s'avère que mon ITEM_SCHEDULER_URI
n'était pas correct car j'ai supposé un point de terminaison différent de celui qui était réellement rempli. Après avoir vérifié le ApplicationManifest
, j'ai pu résoudre le problème.
Voyez-vous un point de terminaison pour ActorService
dans Service Fabric Local Cluster Manager? J'ai vu ce problème lorsque j'ai oublié de définir un point de terminaison. Si vous utilisez la valeur par défaut ActorService
, je pense qu'elle définit la sienne. Mais si vous utilisez votre propre ActorService
personnalisé, vous devez remplacer CreateServiceReplicaListeners()
et en créer un vous-même:
protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
{
return new List<ServiceReplicaListener>(base.CreateServiceReplicaListeners())
{
new ServiceReplicaListener(c => new FabricTransportServiceRemotingListener(c, this)),
};
}
Cela m'a pris un certain temps, mais mon problème était que j'avais complètement la mauvaise interface dans l'appel ActorProxy.Create
. Service Fabric enregistre toujours l'acteur et il peut être vu dans l'explorateur de Service Fabric, mais ne vous y trompez pas.
Ne soyez pas comme moi, vérifiez les erreurs de codage simples avant d'aller examiner les manifestes.
De nouvelles questions
c#
C # (prononcé "see sharp") est un langage de programmation multi-paradigme de haut niveau, typé statiquement développé par Microsoft. Le code C # cible généralement la famille d'outils et d'exécutions Microsoft .NET, notamment le .NET Framework, .NET Core et Xamarin. Utilisez cette balise pour les questions sur le code écrit en C # ou en spécification formelle de C #.