2016-10-03 37 views
1

我正在使用ServicePartitionResolver獲取羣集中另一個應用程序的http端點。服務結構ServicePartitionResolver ResolveAsync

var resolver = ServicePartitionResolver.GetDefault(); 
var partition = await resolver.ResolveAsync(serviceUri, partitionKey ?? ServicePartitionKey.Singleton, CancellationToken.None); 
var endpoints = JObject.Parse(partition.GetEndpoint().Address)["Endpoints"]; 
return endpoints[endpointName].ToString().TrimEnd('/'); 

可正常工作,但是如果我重新部署我的目標應用和我的本地開發框其端口更改,源應用程序仍返回舊端點(也就是現在的無效)。有沒有可以清除的緩存?或者這是一個錯誤?

回答

4

是的,他們被緩存。如果您知道該分區不再有效,或者如果您收到錯誤,則可以調用resolver.ResolveAsync(),該過載具有較早的ResolvedServicePartitionpreviousRsp,這會觸發刷新。

此api超載用於客戶端知道 已解析的服務分區不再有效的情況。

也請參閱article

0

是的。他們被緩存。有兩種解決方案可以解決這個問題。

  1. ,你需要做的最簡單的代碼改變是var resolver = new ServicePartitionResolver();取代var resolver = ServicePartitionResolver.GetDefault();。這迫使服務每次都創建一個新的ServicePartitionResolver對象。而GetDefault()獲取緩存的對象。
  2. [推薦]處理這個問題的正確方法是實現一個實現CommunicationClientFactoryBase的自定義CommunicationClientFactory。然後初始化ServicePartitionClient並致電InvokeWithRetryAsync。它在Service Communication中明確記載在通信客戶端和工廠部分。