0

我有 WCF 服务。在global.asax中,我将一些数据放入 ASP.NET 会话中。但是当我调用 WCF 方法时,Session对象总是NULL.

这是我的 WCF 服务

[WebMethod(EnableSession = true)]
public List<Menu> GetMenus()
{
            List<Menu> menulist = new List<Menu>();

            Object[] O = HttpContext.Current.Session["menu"] as Object[];

            foreach (var item in O)
            {
                Menu menu = new Menu();
                menu.Html = ((WcfServices.Menu)(item.ToType(typeof(Menu)))).Html;
                menu.Label = ((WcfServices.Menu)(item.ToType(typeof(Menu)))).Label;
                menulist.Add(menu);
            }

            return menulist;
}

[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, 
                           RequestFormat = WebMessageFormat.Json, 
                           BodyStyle = WebMessageBodyStyle.WrappedRequest)]
List<Menu> GetMenus();

这是我的global.asax文件

protected void Session_Start(object sender, EventArgs e)
{
     CrmHelper helper = new CrmHelper();

     if (Session["service"] == null)
     {
         IOrganizationService s = helper.CreateService(true);
         Session["service"] = s;
     }

     MobileHelper mobilehelper = new MobileHelper((IOrganizationService)Session["service"]);
     if (Session["menu"] == null)
     {
         Session["menu"] = mobilehelper.GetMainMenus();
     }
}

当我调用 WCF 服务时访问Session["service"]Session["menu"]总是返回。null

有任何想法吗?

4

1 回答 1

1

主要问题是:WCF不是ASP.NET!

默认情况下,WCF 不依赖于 ASP.NET 运行时(这是一件好事!!),因此无法访问 ASP.NET 结构,例如Session...

如果您需要向 WCF 服务提供一些数据,放置该信息的最佳位置是 WCF 服务可以从中加载信息的数据库表。

如果您坚持使用 ASP.NET 会话存储,并且您不介意在这种情况下将自己限制为使用带有 ASP.NET 的 IIS 作为 WCF 服务的托管环境,请查看此博客文章您需要做什么才能访问 ASP.NET 会话状态。

于 2013-09-04T17:02:07.187 回答