1

我在大型网络应用程序的中间,我使用实体框架作为我的数据服务,现在我们需要一些 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 没有 HttpContext.Current。阅读有关 WCF 上下文的更多信息 - 这个问题可能是一个好的开始:http ://social.msdn.microsoft.com/Forums/en/wcf/thread/27896125-b61e-42bd-a1b0-e6da5c23e6fc 。

我还认为使用 DI 容器(即Castle Windsor)管理 ObjectContext 的生命周期会更好。多亏了这一点,没有必要公开静态属性 Current,这对于 WCF 服务、单元测试等来说是个问题。

于 2012-04-14T06:53:38.060 回答
1

查看wcf 服务和 ASP.NET中的“在 ASP.NET 兼容模式下托管 WCF 服务” 。它解释了如何在 wcf 服务中获取有效的 HttpContext。

于 2012-04-14T08:07:58.933 回答