web-dev-qa-db-ja.com

パーティションのプライマリインスタンスまたはステートレスインスタンスのアドレスが無効です

すぐに使用できるパーティショニングを使用してステートフルサービスを作成しました。

<StatefulService ServiceTypeName="ExamplesServiceType" TargetReplicaSetSize="[ExamplesService_TargetReplicaSetSize]" MinReplicaSetSize="[ExamplesService_MinReplicaSetSize]">
            <UniformInt64Partition PartitionCount="[ExamplesService_PartitionCount]" LowKey="-9223372036854775808" HighKey="9223372036854775807" />
         </StatefulService>

サービスマニフェストは、パラメータを(すぐに使用できる状態でも)次のように設定します。

 <Parameter Name="ExampleService_PartitionCount" Value="1" />
 <Parameter Name="ExampleService_MinReplicaSetSize" Value="2" />
 <Parameter Name="ExampleService_TargetReplicaSetSize" Value="3" />
 <Parameter Name="WebService_InstanceCount" Value="1" />

ここで、同じクラスター内のステートレスサービスからステートフルサービスを呼び出したいと思います。

 ServiceUriBuilder builder = new ServiceUriBuilder(ExampleServiceName);
 var service = ServiceProxy.Create<IExampleService>(builder.ToUri(),new ServicePartitionKey(1));

 return service.MyCallAsync(id);

次のエラーが発生します:

パーティション 'a67f7afa-3370-4e6f-ae7c-15188004bfa1'のプライマリインスタンスまたはステートレスインスタンスのアドレスが無効です。これは、レプリカ/インスタンスからの正しいアドレスがシステムに登録されていないことを意味します。

ログをイベントログに到達させようとしているステートフルサービスとログには、「partitionId」:「a67f7afa-3370-4e6f-ae7c-15188004bfa1」が含まれています。

何が足りないのですか?

18
tymtam

http://vunvulearadu.blogspot.com/2016/04/Azure-service-fabric-primary-or.html で説明されているように、リモコンを登録していませんでした。

        protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
    {
        return new[] { new ServiceReplicaListener(context => this.CreateServiceRemotingListener(context)) };
    }
28
tymtam

他の誰かがステートレスサービスのために何をすべきか疑問に思ってここに来る場合、これは私のために働きます:

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
    return new[] { new ServiceInstanceListener(context => this.CreateServiceRemotingListener(context)) };
}
11
KPERI

_Microsoft.ServiceFabric.Services.Remoting_バージョン3.3.638を使用している方のために、CreateServiceInstanceListeners()という拡張メソッドがないことがわかりました。 _Microsoft.ServiceFabric.Services.Remoting.Runtime.ServiceRemotingExtensions_でCreateServiceRemotingInstanceListeners()CreateServiceRemotingReplicaListeners()しか見つかりませんでした。

このコードは私のためにコンパイルされました:

_    protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
    {
        return this.CreateServiceRemotingInstanceListeners();
    }
_
1
David Klempfner