2012-04-14 53 views
1

我在大网络应用程序的中间,我使用实体框架为我的数据服务,现在我们需要一些Windows应用程序与我们的数据进行工作,所以我想给他们一个服务与WCF访问Web和win表单应用程序中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();

+0

它是否引发异常或只是不回馈任何数据? – 2012-04-14 06:49:37

+0

亲爱的@LosFrijoles异常就是**对象引用未设置为对象的实例。**对于此行{DepositEntities oc = System.Web.HttpContext.Current.Items [“ObjectContext”]作为DepositEntities;}但是此行当我想使用WCF时,在我的整个项目中正常工作我得到这个错误 – WhizDeveloper 2012-04-14 06:58:39

+0

'HttpContext'只存在于ASP.NET Web应用程序的上下文中。 Windows Forms应用程序没有'HttpContext',所以你不能使用它来缓存数据.....你需要检查一些不依赖于'HttpContext'的其他缓存手段。 – 2012-04-14 07:12:59

回答

1

你最有可能遇到问题,因为WCF没有HttpContext.Current。阅读关于WCF上下文的更多信息 - 这个问题可能是一个好的开始:http://social.msdn.microsoft.com/Forums/en/wcf/thread/27896125-b61e-42bd-a1b0-e6da5c23e6fc

我也认为用DI容器管理ObjectContext的生命周期会更好(如Castle Windsor)。由于这个原因,没有必要暴露静态属性Current,这是WCF服务,单元测试等的问题。

+0

你的答案似乎是正确的,但我找不到我的解决方案这对我来说有点复杂!你能告诉我应该用哪个会话来解决问题!? – WhizDeveloper 2012-04-14 07:32:29

+0

我改变了我的方式!我在客户端使用Web Service而不是使用WCF – WhizDeveloper 2012-04-15 07:31:19

1

检查出“在ASP.NET兼容模式下承载WCF服务”wcf service and ASP.NET。它解释了如何在wcf服务中获取有效的HttpContext。

相关问题