繁体   English   中英

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

[英]WCF request doesn't flow via asp.net pipeline

我在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 ,并且事件HttpContext.Current不为空。

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

  1. HttpContext.Current.Session为空
  2. 永远不会调用Global.asax的Application_BeginRequest

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

  1. 关于会话,可以使用OperationContext.Current.RequestContext而不是HttpContext.Current.Session进行处理。

HttpContext:从WCF服务中访问时,Current始终为null。 请改用T:System.ServiceModel.OperationContext.Current.RequestContext。

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

  1. ASP.Net应用程序使用Application_BeginRequest,但是WCF的工作方式不同于常见的Web应用程序,因此,无法在每个请求上都单击BeginRequest。

ASP.NET HTTP运行时处理ASP.NET请求,但不参与发往WCF服务的请求的处理.... WCF服务模型拦截发给WCF服务的消息并通过WCF传输/通道堆栈路由

因此,您的问题可能与此问题有关。 此信息也可在同一链接上获得。

希望它对您的问题有所帮助。

答案很简单(而且很明显):

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">

是。 RAMMFAR。

对我来说,很明显,这两种技术不应该在同一应用程序中运行,这就是为什么它们具有两个不同的管道。 大自然服务是孤立的事情。 现在,您只需尝试找到一种解决方法,就可以基于它们都在同一IIS上运行的事实。

我建议您宁愿从目标,要实现的目标开始。 如果您需要将新的类似于服务的功能集成到本机ASP.NET应用程序中,则可以

1)使用ASMX服务(如果需要,将提供SAOP)和/或页面方法

2)如果需要JSON服务,请尝试集成WEB API。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM