ASP.NET 中的 REST WCF 服务和会话
Posted
技术标签:
【中文标题】ASP.NET 中的 REST WCF 服务和会话【英文标题】:REST WCF service and Session in ASP.NET 【发布时间】: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,也许这也有帮助? 【参考方案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?
【讨论】:
以上是关于ASP.NET 中的 REST WCF 服务和会话的主要内容,如果未能解决你的问题,请参考以下文章