ASP.NET中的REST WCF服务和会话

时间:2010-12-28 12:05:29

标签: .net asp.net wcf sessionid

如果可以,请帮忙。

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

谢谢,

2 个答案:

答案 0 :(得分:4)

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

您打算如何从REST客户端获取该密钥?这些客户端在身份验证后最初如何获取该密钥?他们存放钥匙的地方?

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

IMHO会话与基于REST的设计无关。

答案 1 :(得分:1)

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

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

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

  

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

有关详细信息,请参阅此处:What does AspNetCompatibilityRequirements really mean?