1

私は大きなWebアプリケーションの真っ只中にあり、データサービスとしてEntity Frameworkを使用しています。現在、データを処理するためにいくつかのWindowsアプリケーションが必要なので、WCFを使用してサービスを提供したいと思います。

しかし、クライアントがサービスを利用したい場合、エンティティモデルのキャッシュに使用するパブリックプロパティからエラーが発生します

    public partial class DepositEntities : ObjectContext
    {
        public static DepositEntities Current
        {
            get
            {
                DepositEntities oc = 
                    HttpContext.Current.Items["ObjectContext"] as DepositEntities;

                if (oc == null)
                {
                    oc = new DepositEntities();
                    HttpContext.Current.Items["ObjectContext"] = oc;
                }

                return oc;
            }
        }
    }

コードをデバッグした後、問題はこの行にあることがわかります

DepositEntities oc = System.Web.HttpContext.Current.Items["ObjectContext"] as DepositEntities;

Currentプロパティ本体をこのようなものに変更すると

public static DepositEntities Current
{
   get
   {
      DepositEntities oc = new DepositEntities();
      return oc;
   }
}

サービスからデータを取得するときはすべて問題ありません問題はありません

しかし、コードに参加しているところはどこでも問題があります。これは、次の理由で異なるデータソースがあると考えているためです。new DepositEntities();

4

2 に答える 2

1

wcf サービスと ASP.NETの「ASP.NET 互換モードでの WCF サービスのホスティング」を確認してください。wcf サービスで有効な HttpContext を取得する方法について説明します。

于 2012-04-14T08:07:58.933 に答える
1

WCF に HttpContext.Current がないため、問題が発生している可能性が最も高いです。WCF のコンテキストについてもっと読む - この質問は良い出発点かもしれません: http://social.msdn.microsoft.com/Forums/en/wcf/thread/27896125-b61e-42bd-a1b0-e6da5c23e6fc .

また、ObjectContext の有効期間を DI コンテナー (つまりCastle Windsor )で管理する方がよいと思います。これにより、WCF サービスや単体テストなどで問題となる静的プロパティ Current を公開する必要がなくなります。

于 2012-04-14T06:53:38.060 に答える