私は1つのサービスファブリックアクターサービスを持っています。これにより、ActorService
とActorService.Interfaces
の2つのプロジェクトが作成されます。サービスファブリック内の1つのActorRuntime内に2つのアクターを登録できません。
ActorService.Interfacesには、ルートアクター(IRootActor
)のインターフェイスが含まれています。 ActorService自体には、RootActor
とIChildActor
、ChildActor
が含まれています。どちらのインターフェイスもIActor
を実装しており、両方のクラスがActor
を継承し、それぞれのインターフェイスを実装しています。
ActorRuntime.RegisterActorAsync<ChildActor>(
(context, actorType) => new ActorService(context, actorType,() => container.Resolve<ChildActor>()))
.GetAwaiter()
.GetResult();
ActorRuntime.RegisterActorAsync<RootActor>(
(context, actorType) => new ActorService(context, actorType,() => container.Resolve<RootActor.Factory>()(context)))
.GetAwaiter()
.GetResult();
Thread.Sleep(Timeout.Infinite);
container.Resolve<RootActor.Factory>()(context)
戻りRootActor
インスタンスへの呼び出し:私はこのようなProgram.csの内からこれらの俳優を登録します。
私は
IRootActory proxy = ActorProxy.Create<IRootActor>(new ActorId(id), actorServiceUri);
proxy.Method(data);
呼び出すとすべてがうまく行きます。前述のRootActor.Method
方法は、単一のループで2つのことを行い子役を作成し、それが法だ呼び出す:
IChildActor proxy = ActorProxy.Create<IChildActor>(new ActorId(otherId), sameActorServiceUri);
proxy.OtherMethod(transformedData);
そしてここで問題にしています。 proxy.OtherMethod
コールされると、基本的にこの野生の例外が表示されます:
HRESULT = -2146232969 メッセージ=いいえMethodDispatcherインターフェイス ID '230348154' ソースのために発見された= Microsoft.ServiceFabric.Actors
は私がやっていますここに何か間違っている?私はthis SO threadを考慮して、1つのサービスから2人の俳優を作ることができると考えました...
名前を不明確にすることについてのコメントはありませんか?あなたが投稿したリンクは、その名前がアクタが実装するインタフェースから派生したものだと言いますが、アクタがより多くのインタフェースを実装すると推論することはできません。 – netchkin