gpt4 book ai didi

asp.net - WCF 请求不通过 asp.net 管道流动

转载 作者:行者123 更新时间:2023-12-02 09:31:16 26 4
gpt4 key购买 nike

我有一个托管在 asp.net 应用程序中的 WCF 服务。

这是服务(缩短):

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
[ServiceContract(Name = Name, Namespace = Namespace)]
[ServiceBehavior(Name = Name, Namespace = Namespace)]
public class WcfMaintenanceFacade {...}

这里是托管:

RouteTable.Routes.Add(new ServiceRoute("entity/maintenance/5.20", new ServiceHostFactory(), typeof(WcfMaintenanceFacade)));

这是相关的配置部分:

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>

我的服务实例化,请求传入,并且事件 HttpContext.Current 不为空。

有两个(对我来说是主要的)问题我无法解决:

  1. HttpContext.Current.Session 为空
  2. Global.asax 的 Application_BeginRequest 从未被调用

是的,从调用堆栈来看,请求似乎正在通过 WCF 激活管道,而不是 ASP.net 管道。那么我做错了什么?

最佳答案

  1. 关于 session ,您可以使用OperationContext.Current.RequestContext而不是HttpContext.Current.Session来处理它。

HttpContext: Current is always null when accessed from within a WCF service. Use T:System.ServiceModel.OperationContext.Current.RequestContext instead.

在此处了解更多信息:https://msdn.microsoft.com/en-us/library/aa702682.aspx

  • Application_BeginRequest 由 ASP.Net 应用程序使用,但 WCF 的工作方式与常见的 Web 应用程序不同,因此无法在每个请求上命中 BeginRequest。
  • The ASP.NET HTTP runtime handles ASP.NET requests but does not participate in the processing of requests destined for WCF services .... he WCF Service Model intercepts messages addressed to WCF services and routes them through the WCF transport/channel stack

    所以,您的问题可能与此问题相关。此信息也可通过同一链接获取。

    希望对您的疑问有所帮助。

    关于asp.net - WCF 请求不通过 asp.net 管道流动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32887136/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com