2016-12-13 29 views
0

我使用下面的代码调用演员无状态的服务:如何向Actor应用程序添加监听器?

ICarUpdate carUpdate = ServiceProxy.Create<ISampleInterface>(new Uri("fabric:/App/Car")); 
await carUpdate.ProcessCarUpdate(); 

现在,当ProcessCarUpdate()被调用我得到的错误:“分区的主要或无国籍实例具有无效地址“

解决这一点,我们必须添加监听器,The primary or stateless instance for the partition has invalid address

但这种方法(CreateServiceReplicaListeners)VI在无法从演员覆盖到远程注册。

当我们想要从演员到服务的远程通话时,我们该怎么做?

+0

莫非你请写一个服务之间通信的例子?谁不知道谁叫谁。 – cassandrad

+0

@ cassandrad:更新了问题,请看看。 – Vinodh

回答

1

1.增加给你的无状态的服务代码,喜欢描述 here

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

2.In您演员,称这样的服务:

var carUpdate = ServiceProxy.Create<ICarUpdate>(new Uri("fabric:/App/Car")); 
await carUpdate.ProcessCarUpdate(); 
+0

这工作。我现在面临另一个问题,我在ProcessCarUpdate(委托)内部传递一个委托,并抛出此异常“使用数据协定名称'DelegateSerializationHolder.DelegateEntry:http:// schemas'键入'System.DelegateSerializationHolder + DelegateEntry'。 datacontract.org/2004/07/System',如果您使用的是DataContractSerializer,请考虑使用DataContractResolver,或者将未知的静态类型添加到已知类型列表中 - 例如,使用KnownTypeAttribute属性或将它们添加到传递给序列化程序的已知类型的列表“。 – Vinodh

+0

您的datacontracts必须是DataContractSerializable。 https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-actors-notes-on-actor-type-serialization https://msdn.microsoft.com/library /ms731923.aspx – LoekD

相关问题