サービスファブリックを初めて使用し、トピックを扱うMSDNの記事を見て始めました。 Hello Worldサンプルhereを実装することから始めました。サービスファブリック - ステートフルサービスの永続性
私はに元のRunAsyncの実装を変更:私もDataObjectのタイプを導入し、その種類にUpdateDateプロパティを公開している
var myDictionary = await this.StateManager.GetOrAddAsync<IReliableDictionary<int, DataObject>>("myDictionary");
while (!cancellationToken.IsCancellationRequested)
{
DataObject dataObject;
using (var tx = this.StateManager.CreateTransaction())
{
var result = await myDictionary.TryGetValueAsync(tx, 1);
if (result.HasValue)
dataObject = result.Value;
else
dataObject = new DataObject();
//
dataObject.UpdateDate = DateTime.Now;
//
//ServiceEventSource.Current.ServiceMessage(
// this,
// "Current Counter Value: {0}",
// result.HasValue ? result.Value.ToString() : "Value does not exist.");
await myDictionary.AddOrUpdateAsync(tx, 1, dataObject, ((k, o) => dataObject));
await tx.CommitAsync();
}
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
。私はアプリ(Visual Studioの2015年F5)を実行すると、私は1つを作成するよう
[DataContract(Namespace = "http://www.contoso.com")]
public class DataObject
{
[DataMember]
public DateTime UpdateDate { get; set; }
}
、(1としてキー)のDataObjectインスタンスが辞書に見つからない、UpdateDateを設定し、辞書に追加し、トランザクションをコミットします。次のループでは、データオブジェクト(キーとして1)を検索し、UpdateDateを設定し、辞書にオブジェクトを更新してトランザクションをコミットします。完璧。
ここに私の質問です。私がサービスプロジェクト(Visual Studio 2015のF5)を停止して再起動すると、runAsyncの最初の反復でdataObject(キーとして1)が見つかりましたが、そうではないことが予想されます。私はすべての州がそのレプリカに流されることを期待する。
ステートフルサービスが内部状態をプライマリレプリカにフラッシュするために何かする必要がありますか?
私が読んだところでは、このすべてがサービスファブリックによって処理され、トランザクションでのコミットを呼び出すだけで十分であるように見えます。 (サービスファブリックエクスプローラ - >アプリケーションビューで)プライマリレプリカを検索すると、トランザクションをコミットすると(ステップ実行すると)RemoteReplicator_xxx LastACKProcessedTimeUTCが更新されることがわかります。
ご協力いただきまして誠にありがとうございます。
ありがとうございました!
-mark
ありがとうSean。私のプロジェクトプロパティ(sfprojプロジェクト上)は、[プロパティ]ウィンドウにアプリケーショングループを表示しません。 vs2015のアップデートが必要なのでしょうか? Visual Studio Service Fabric Toolsがインストールされています(開始ページのsdk)。再度、感謝します! – markondotnet
いつSDKをインストールしましたか?この機能は、昨日公開された公開プレビュー版の新機能です。 –
私はこれを過去の日曜日にインストールしましたが、今日(vs2015通知で)v2.8が(昨日のように)出ていたので、私はそれをインストールしました。まだプロジェクトのプロパティで「開始時にデータを保持する」オプションはありません。 – markondotnet