如果可以,请帮忙。
我一直在尝试从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>
谢谢,
答案 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?