Azure service fabric 分区的主实例或无状态实例的地址无效

Azure service fabric 分区的主实例或无状态实例的地址无效,azure-service-fabric,Azure Service Fabric,我使用开箱即用分区创建了一个有状态服务: <StatefulService ServiceTypeName="ExamplesServiceType" TargetReplicaSetSize="[ExamplesService_TargetReplicaSetSize]" MinReplicaSetSize="[ExamplesService_MinReplicaSetSize]"> <UniformInt64Partition PartitionCo

我使用开箱即用分区创建了一个有状态服务:

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

服务清单将参数设置为(开箱即用):


现在,我想从同一集群中的无状态服务调用有状态服务:

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

 return service.MyCallAsync(id);
ServiceUriBuilder=新的ServiceUriBuilder(例如ServiceName);
var service=ServiceProxy.Create(builder.ToUri(),newservicepartitionkey(1));
返回服务.MyCallAsync(id);
我得到以下错误:

分区“a67f7afa-3370-4e6f-ae7c-15188004bfa1”的主实例或无状态实例的地址无效,这意味着副本/实例的正确地址未在系统中注册

我正在尝试将有状态服务的日志访问到事件日志,这些日志带有“partitionId”:“a67f7afa-3370-4e6f-ae7c-15188004bfa1”


我错过了什么

我没有按照上的说明注册遥控器

protectedoverride IEnumerable CreateServiceReplicaListeners()
{
返回new[]{newServiceReplicaListener(上下文=>this.CreateServiceRemotingListener(上下文))};
}

如果其他人来到这里想知道如何处理无状态服务,这对我很有用:

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
    return new[] { new ServiceInstanceListener(context => this.CreateServiceRemotingListener(context)) };
}
受保护的重写IEnumerable CreateServiceInstanceListeners()
{
返回新[]{new ServiceInstanceListener(上下文=>this.CreateServiceRemotingListener(上下文))};
}

对于使用Microsoft.ServiceFabric.Services.Remoting的用户版本3.3.638, 我发现没有名为
CreateServiceInstanceListeners()
的扩展方法。我只在Microsoft.ServiceFabric.Services.Remoting.Runtime.ServiceRemotingExtensions中找到了
CreateServiceRemotingInstanceListeners()
CreateServiceRemotingReplicaListeners()

这段代码是为我编译的:

    protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
    {
        return this.CreateServiceRemotingInstanceListeners();
    }
受保护的重写IEnumerable CreateServiceInstanceListeners()
{
返回此参数。CreateServiceRemotingInstanceListeners();
}

非常感谢分享您的解决方案,这治好了我的头痛。;)CreateServiceRemotingListener是此命名空间中的扩展方法,因此请确保使用Microsoft.ServiceFabric.Services.Remoting.Runtime添加;对于那些找不到该扩展方法的人。@mayu:我面临同样的问题,但我在actor应用程序中调用了一个无状态服务,并且我没有要重写的CreateServiceReplicaListeners()方法,您知道如何为actors执行此操作吗?@Vinodh:无状态服务有类似的方法
CreateServiceInstanceListeners()
相反,您应该使用
受保护的覆盖IEnumerable CreateServiceInstanceListeners(){return new[]{new serviceSinstanceListener(this.CreateServiceRemotingListener)};}
.Argh来覆盖它,这太痛苦了。做得好!对于无法找到此方法的用户,您需要使用Microsoft.ServiceFabric.Services.Remoting.Runtime添加

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