【问题标题】:REST WCF service and Session‏ in ASP.NETASP.NET 中的 REST WCF 服务和会话
【发布时间】:2011-05-31 13:27:01
【问题描述】:

如果可以的话,请帮忙。

我一直在尝试从 WCF REST 服务中访问 asp.net 应用程序的当前会话对象。

根本没有成功。从服务访问的会话对象与 aspx 页面中的会话对象不同。

所以,这是我的问题:是否可以通过 HttpContext.Current.Session 访问 REST WCF 服务中的当前会话?

代码有以下几点:

 [AspNetCompatibilityRequirements
(RequirementsMode = 
AspNetCompatibilityRequirementsMode.Allowed)] // I have also tried Required
public class DataService : IDataService

在 web.config 中:

<system.serviceModel>
  <behaviors>
   <endpointBehaviors>
    <behavior name="ClosedRoom.DataServiceBehavior">
     <enableWebScript />
    </behavior>
   </endpointBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" >
  <baseAddressPrefixFilters>
        <add prefix="http://localhost:63399"/>
      </baseAddressPrefixFilters>
    </serviceHostingEnvironment>

  <services>
    <service name="ClosedRoom.DataService">
      <endpoint address="" behaviorConfiguration="ClosedRoom.DataServiceBehavior"
        binding="webHttpBinding" contract="ClosedRoom.IDataService" />
    </service>
  </services>
</system.serviceModel>

谢谢,

【问题讨论】:

  • WCF 和 ASP.NET 是两种完全不同的技术。请澄清你的问题。它不清楚你试图完成什么。 ASP.NET 会话独立于您可能在(ASP.NET Web?)应用程序中托管的任何 WCF 服务会话。
  • 尝试从blogs.msdn.com/b/wenlong/archive/2010/02/21/… 下载示例应用程序并尝试找出您缺少什么。
  • 您是从应用程序还是从浏览器调用服务?您是否尝试检查传输的 cookie? ASP.NET 中的会话由 cookie 标识。如果 cookie 未随服务请求一起传输,则创建新会话。顺便提一句。 REST 服务应该是无状态的 = 没有任何会话。
  • 对于 ashx,您需要“实施”IReadOnlySessionState,也许这也有帮助?

标签: .net asp.net wcf sessionid


【解决方案1】:

要重新隐藏会话,您需要提供密钥。在普通的 asp.net 应用程序中,密钥由用户通过 cookie 或 url 参数提供。

您打算如何从 REST 客户端获取该密钥?这些客户端在身份验证后最初是如何获得该密钥的?他们将密钥存储在哪里?

这就是为什么大多数基于 REST 的服务都需要一个 api 访问密钥以及另一个密钥来签署每个请求。

恕我直言,会话与基于 REST 的设计无关。

【讨论】:

  • 我同意这篇文章的观点。我认为 OP 需要在他的架构中添加另一个元素。
  • @user6130:感谢您的回答。就像对我的一个问题一样:我想在 cookie 中添加用户 ID(我在登录时设置了 5 分钟的滑动到期)并使用它来签署我的请求并检查服务器端是否该用户 ID 可以访问数据他试图请求。这会被认为是好的做法吗?谢谢! :)
【解决方案2】:

我知道很久以前就有人问过这个问题,但这可以通过在 asp.net 应用程序中托管 wcf restful 服务来实现,然后在您的服务类顶部添加以下属性:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

这可以实现许多功能,包括:

HttpContext:在 ASP.NET 兼容模式下运行的 WCF 服务可以访问 Current 及其关联状态。

更多信息请看这里:What does AspNetCompatibilityRequirements really mean?

【讨论】:

    猜你喜欢
    • 2012-06-21
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    相关资源
    最近更新 更多