Azure service fabric 服务结构,将V2远程处理到有状态服务不工作

Azure service fabric 服务结构,将V2远程处理到有状态服务不工作,azure-service-fabric,service-fabric-stateful,service-fabric-stateless,Azure Service Fabric,Service Fabric Stateful,Service Fabric Stateless,我不能让它工作,我已经在谷歌上搜索过,可能找到了关于如何做这件事的每一页,所有这两个 基本上,我只是想让SF Remoting V2从一个无状态的.NET Core 2 MVC应用程序运行到一个状态完整的服务 以下是我所做的: 控制器中的客户端代码:(尽可能简化): 公共类值控制器:控制器 { [HttpGet] 公共异步任务Get() { //提供证书详细信息。 var serviceProxyFactory=new serviceProxyFactory((c)=>new fabrictTr

我不能让它工作,我已经在谷歌上搜索过,可能找到了关于如何做这件事的每一页,所有这两个

基本上,我只是想让SF Remoting V2从一个无状态的.NET Core 2 MVC应用程序运行到一个状态完整的服务

以下是我所做的:

控制器中的客户端代码:(尽可能简化):

公共类值控制器:控制器
{
[HttpGet]
公共异步任务Get()
{
//提供证书详细信息。
var serviceProxyFactory=new serviceProxyFactory((c)=>new fabrictTransportServiceRemotingClientFactory());
var proxy=serviceProxyFactory.CreateServiceProxy(新Uri(“结构:/sfexperience/Stateful1”);
var value3=等待代理。GetGreeting(“Bob”);
返回新的[]{“value1”、“value2”、value3};
}
服务代码接口:

using System.Threading.Tasks;
using Microsoft.ServiceFabric.Services.Remoting;
using Microsoft.ServiceFabric.Services.Remoting.FabricTransport;


[assembly: FabricTransportServiceRemotingProvider(RemotingListener = 
RemotingListener.V2Listener, RemotingClient = RemotingClient.V2Client)]

namespace Stateful1.Abstractions
{

 public interface ICallMe : IService
 {
     Task<string> GetGreeeting(string name);
 }
}
使用System.Threading.Tasks;
使用Microsoft.ServiceFabric.Services.Remoting;
使用Microsoft.ServiceFabric.Services.Remoting.FabricTransport;
[程序集:FabricTransportServiceRemotingProvider(RemotingListener=
RemotingListener.V2Listener,RemotingClient=RemotingClient.V2Client)]
命名空间Stateful1.抽象
{
公共接口ICallMe:IService
{
任务getgreeting(字符串名称);
}
}
服务代码:

    Public sealed class Stateful1 : StatefulService, ICallMe
{
    public Stateful1(StatefulServiceContext context)
        : base(context)
    { }

    protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
    {
        return this.CreateServiceRemotingReplicaListeners();
    }

    public Task<string> GetGreeeting(string name)
    {
        return Task.FromResult(@"Congratulations, you have remoting working. :-) ");
    }
公共密封类Stateful1:StatefulService,ICallMe
{
public Stateful1(StatefulServiceContext上下文)
:基本(上下文)
{ }
受保护的重写IEnumerable CreateServiceReplicaListeners()
{
返回这个.CreateServiceRemotingReplicaListeners();
}
公共任务GetGreeting(字符串名称)
{
return Task.FromResult(@“恭喜你,你已经远程工作了:-”);
}
我已将以下内容添加到ServiceManifest.xml中

  <Resources>
<Endpoints>
  <!-- To enable Service remonting for remoting services V2-->
  <Endpoint Name="ServiceEndpointV2" />

  <Endpoint Name="ReplicatorEndpoint" />
</Endpoints>
</Resources>

但它不起作用..我得到以下例外:

选择器{1}的分区键/ID“{0}”无效


我做错了什么?

在创建服务代理的调用中,您必须指定一个分区键,因为您正在连接到一个有状态的服务

long partitionKey = 0L;  //TODO: Determine partition key
var proxy = serviceProxyFactory.CreateServiceProxy<ICallMe>(new Uri("fabric:/SFExperiment/Stateful1"), new ServicePartitionKey(partitionKey), TargetReplicaSelector.PrimaryReplica);
long partitionKey=0L;//TODO:确定分区键
var proxy=serviceProxyFactory.CreateServiceProxy(新Uri(“结构:/sfexperience/Stateful1”)、新ServicePartitionKey(partitionKey)、TargetReplicaSelector.PrimaryReplica);
另外,请确保重用服务代理工厂,而不是创建新的服务代理工厂。 例如,看一下代码

long partitionKey = 0L;  //TODO: Determine partition key
var proxy = serviceProxyFactory.CreateServiceProxy<ICallMe>(new Uri("fabric:/SFExperiment/Stateful1"), new ServicePartitionKey(partitionKey), TargetReplicaSelector.PrimaryReplica);