1

現在、IIS サーバーの Web プロジェクトでホストされている WCF サービス (データ/RIA サービスではない) と、この WCF サービスを指すサービス参照を持つ Windows Phone クライアントを持つ N 層アプリケーションを構築しています。

Entity Framework を介したデータベースへの WCF サービス アクセス。

これが私の問題です。クライアント以外のどこからでもデータベースを更新すると、どのクライアントにも更新が表示されません。特定のクライアントからデータベースを更新すると、その変更はそのクライアントだけが見ることができます。

しかし、しばらくすると、すべてのクライアントが更新されたデータにアクセスできるようになります。

WCF のデータの IIS キャッシュまたは LINQ レベルでのキャッシュが原因であると考えられますが、IIS キャッシュを無効にしても問題は残ります。

これを修正する方法について何か考えはありますか?

ありがとう

4

1 に答える 1

0

したがって、これを正式な答えに変えてください:

フレームワークは (IIS ではなく) 値をキャッシュしようとします。そのため、Unit of Work をトランザクションの範囲を超えて拡張しないようにしてください (つまり、same メソッドと retrieve メソッドの両方に使用します)。また、フレームワーク内で発生している可能性のある既存のキャッシュを削除する必要があるストア/取得呼び出し間のコンテキストを再確立してみてください。すなわち

[OperationContract]
public void Save(MyObject entity)
{
  using (MyEntities db = new MyEntities())
  {
    db.MyObjects.Add(entity);
    db.SaveChanges();
  }
}

[OperationContract]
public MyObject Single(Int32 id)
{
  using (MyEntities db = new MyEntities())
  {
    return db.MyObjects.Single(x => x.Id == id);
  }
}

とは対照的に:

[ServiceContract]
class MyService
{
  private MyEntities db = new MyEntities();

  [OperationContract]
  public void Save(MyObject entity)
  {
    this.db.MyObjects.Add(entity);
    this.db.SaveChanges();
  }

  [OperationContract]
  public MyObjectFind(Int32 id)
  {
    return this.db.MyObjects.Single(x => x.Id == id);
  }
}
于 2012-06-04T13:39:10.633 に答える