すぐに使用できるパーティショニングを使用してステートフルサービスを作成しました。
<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」が含まれています。
何が足りないのですか?
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)) };
}
他の誰かがステートレスサービスのために何をすべきか疑問に思ってここに来る場合、これは私のために働きます:
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[] { new ServiceInstanceListener(context => this.CreateServiceRemotingListener(context)) };
}
_Microsoft.ServiceFabric.Services.Remoting
_バージョン3.3.638を使用している方のために、CreateServiceInstanceListeners()
という拡張メソッドがないことがわかりました。 _Microsoft.ServiceFabric.Services.Remoting.Runtime.ServiceRemotingExtensions
_でCreateServiceRemotingInstanceListeners()
とCreateServiceRemotingReplicaListeners()
しか見つかりませんでした。
このコードは私のためにコンパイルされました:
_ protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return this.CreateServiceRemotingInstanceListeners();
}
_