5

如果可以的话请帮忙。

我一直在尝试从 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>

谢谢,

4

2 回答 2

4

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

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

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

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

于 2010-12-28T13:54:40.590 回答
1

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

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

这可以实现许多事情,包括:

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

有关更多信息,请参见此处:AspNetCompatibilityRequirements 的真正含义是什么?

于 2016-08-03T11:13:01.950 回答