【发布时间】:2015-10-01 12:02:29
【问题描述】:
我有一个托管在 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.Session为空 - Global.asax 的
Application_BeginRequest永远不会被调用
是的,从调用堆栈看来,请求正在通过 WCF 激活管道,而不是 ASP.net 管道。那我做错了什么?
【问题讨论】:
-
当涉及到 wcf 执行管道时,您应该使用
OperationContext。为什么 WCF 服务会使用 global.asax?它不是特定于 Web 应用程序的吗? -
如果你的服务依赖于会话,你可以在你的服务上实现可靠会话。请阅读-msdn.microsoft.com/en-us/library/ms733136(v=vs.110).aspx
-
我正在将 WCF 服务集成到已经严重依赖 asp.net 管道的遗留应用程序中。
-
这两种技术的处理流程不同。因此,将 WCF 消息路由到 ASP.Net 管道是不可取的。要在 WCF 中启用会话,您必须启用可靠会话,但是这将如何与 ASP.Net 会话进行通信,我不确定。如果您找到解决方法告诉我,同时我也在寻找解决方案。
-
来自 MSDN -msdn.microsoft.com/en-us/library/ms733040(v=vs.110).aspx 在 Windows Communication Foundation (WCF) 应用程序中,会话将一组消息关联到一个会话中。 WCF 会话不同于 ASP.NET 应用程序中可用的会话对象,支持不同的行为,并以不同的方式进行控制。
标签: asp.net wcf integrated-pipeline-mode