【问题标题】:HttpContext.Current in WCF service during 2nd request第二次请求期间 WCF 服务中的 HttpContext.Current
【发布时间】:2011-03-10 22:06:25
【问题描述】:

有一个 Silverlight (4.0) 应用程序正在调用 WCF 服务。在第一次调用 WCF 服务期间,一些数据是从 HttpContext.Current.Session 对象获取的。

在第二次调用 WCF 服务期间,HttpContext.Current 为空...您知道为什么(以及如何解决)吗?

当前设置:

  1. 选项“aspNetCompatibilityEnabled”和“runAllManagedModulesForAllRequests”在 web.config 中设置为 true,
  2. 服务定义如下:

    [ServiceContract(Namespace = "")]

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

    公共类 ElitaDataService {

附:从 WCF 服务使用 HttpContext 的目的是检查: 一种。如果当前用户已登录(此信息存储在 Session 中); 湾。如果用户使用自己的数据(例如,仅查看自己的订单详细信息)。

P.P.S.我看到建议使用 OperationContext 代替 HttpContext,但不清楚 OperationContext 中哪些属性有助于解析项目“a”和“b”。

请指教,谢谢。

【问题讨论】:

  • WCF 不是 HTTP 也不是 ASP.NET - 你需要从 HttpContext 得到什么?在 WCF 中,您应该改用 OperationContext
  • 感谢您的建议,但我不知道如何使用 OperationContext 检查所需的内容(请参阅更新的原始问题)。
  • 不要使用 HttpContext。虽然 WCF 被设计为与协议和主机无关,但创建一个只能通过 HTTP 和 ASP.NET 使用的服务并没有错。使用 HttpContext 并没有做错任何事情。
  • Samuel,我也有同样的想法:所以问题是:为什么 HttpContext.Current 对于第二个请求为空?你有什么主意吗?谢谢。

标签: .net asp.net wcf silverlight silverlight-4.0


【解决方案1】:

所以您在 web.config 中将 aspNetCompatibilityEnabled 设置为 true,但是您的 [ServiceContract] 类中有此属性吗?

[AspNetCompatibilityRequirements(RequirementsMode =
    AspNetCompatibilityRequirementsMode.Allowed)]

(您可以使用AllowedRequired

仅仅因为托管应用程序允许 asp.net 兼容性并不意味着个别服务已打开它。

【讨论】:

  • 是的,这个属性是开启的。
【解决方案2】:

这是一个魔术...现在 HttpContext.Current 在每个请求期间都是非空的...不知道为什么...如果您知道为什么会这样 - 请告诉我。

【讨论】:

    猜你喜欢
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2015-10-05
    • 2011-08-19
    • 1970-01-01
    • 2019-07-17
    相关资源
    最近更新 更多