2016-12-13 27 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

相關問題