代码之家  ›  专栏  ›  技术社区  ›  Chris Roberts

jquery、wcf和asp.net

  •  2
  • Chris Roberts  · 技术社区  · 16 年前

    如果这是个愚蠢的问题,请道歉。在以前的ASP.NET项目中,我一直在使用jquery与ASMX Web服务进行通信,没有出现任何问题——包括能够与用户的会话状态进行交互。

    我现在正在涉足Visual Studio 2010和.NET 4.0的世界,我正试图用支持Ajax的WCF服务做同样的事情。

    我已经掌握了一些基本知识,jquery将数据传递给服务调用,它进行一些处理,并返回jquery向用户显示的值。

    我的问题是-如何让WCF服务访问用户的会话信息?我有一种感觉,在我对WCF的理解中,我遗漏了一些相当基本的东西。任何提示都会受到赞赏!

    2 回复  |  直到 16 年前
        1
  •  6
  •   Community CDub    8 年前

    [更新]: 这里也有一篇好文章: http://blogs.msdn.com/drnick/archive/2008/10/08/working-with-session-state.aspx

    当转移到WCF时,有时会混淆ASP.NET开发人员的一个概念是会话状态的概念。在普通的WCF服务中,所有会话状态都存储在本地易失性内存中。应用程序必须选择将会话状态的一部分复制到持久存储位置,以便在运行的实例中保留该状态。WCF没有内置选项来启用会话状态的持久存储或启用从其他进程访问会话状态。

    有几种方法可以使WCF更像ASP.NET。

    使WCF更像ASP.NET的一种方法是通过打开ASP.NET兼容模式使WCF与ASP.NET完全相同。承载在IIS中并使用HTTP作为传输绑定的WCF应用程序与ASP.NET管道一起运行,但无法访问许多ASP.NET功能。打开兼容模式将WCF应用程序与ASP.NET管道集成,并使许多功能可用。显然,只有当您的WCF服务已经非常类似于ASP.NET应用程序时,这种方法才有趣。

    另一种使WCF更像ASP.NET的方法是将WCF会话状态的管理更改为使用远程持久存储,而不是本地易失性内存。这种方法更像是工作流服务用来创建持久应用程序的方法。服务实例和实例上下文的管理由创建和销毁服务对象的iInstanceProvider、创建和销毁实例上下文的iInstanceContextProvider以及设置新获取的实例上下文的iInstanceContextInitializer控制。尽管持久服务的语义不同于会话状态,但有一些通用的构建块可以同时用于这两种情况。 [更新]

    除了上述几点,我还可以向您提出一些建议。请看这篇文章: https://stackoverflow.com/questions/275926/wcf-data-presistence-between-sessions .接下来,考虑使用某种形式的缓存。这可以是缓存样式的服务,也可以是缓存场。有关缓存的更多信息,请查看我在此处的帖子: System.Web.Caching vs. Enterprise Library Caching Block

    这基本上允许您为用户存储一个唯一的密钥(类似于会话ID),并且该用户的所有所谓会话对象都将以缓存层中的用户伪会话ID作为前缀。这个缓存层可以被用来运行站点的网站以及各种WCF服务/项目调用。

        2
  •  2
  •   Chris Roberts    16 年前

    好吧-所以在晚上我发布我最初的问题可能太晚了!用户的ASP.NET会话状态似乎可以从通常位置的服务代码中获得,即- HttpContext.Current.Session .