Sitecore何时运行初始化管道?
我一直在浏览Sitecore.Kernel,但似乎找不到Sitecore运行初始化管道的位置。它是在每个页面请求上运行还是只在应用程序启动时运行一次?你能告诉我这个管道调用Run方法的确切位置吗 更新 我最终问这个问题的原因是因为我在Sitecore的代码中追溯了Sitecore何时运行初始化管道?,sitecore,Sitecore,我一直在浏览Sitecore.Kernel,但似乎找不到Sitecore运行初始化管道的位置。它是在每个页面请求上运行还是只在应用程序启动时运行一次?你能告诉我这个管道调用Run方法的确切位置吗 更新 我最终问这个问题的原因是因为我在Sitecore的代码中追溯了mvc.requestBegin管道的执行。这就是我发现的: Initialize管道运行InitializeRoutes处理器 Sitecore.Mvc.Pipelines.Loader.InitializeRoutes.Proce
mvc.requestBegin
管道的执行。这就是我发现的:
管道运行Initialize
处理器InitializeRoutes
呼叫李>Sitecore.Mvc.Pipelines.Loader.InitializeRoutes.Process(PipelineArgs)
调用Sitecore.Mvc.Pipelines.Loader.InitializeRoutes.RegisterRoutes(RouteCollection routes,PipelineArgs参数)
创建新的Sitecore.Mvc.Pipelines.Loader.InitializeRoutes.SetRouteHandlers(路由收集路由,PipelineArgs参数)
对象RouteHandlerWrapper
返回Sitecore.Mvc.Routing.RouteHandlerWrapper.GetHttpHandler(RequestContext-RequestContext)
(IHttpHandler)新路由HttpHandler
调用Sitecore.Mvc.Routing.RouteHttpHandler.ProcessRequest(HttpContext上下文)
运行Sitecore.Mvc.Routing.RouteHttpHandler.BeginRequest()
管道Mvc.requestBegin
- 在
Sitecore.Context
类中有一个SetActiveSite
方法。这将运行initialize
管道,并且有几个地方可以调用该方法
JobRunner.initializeContext
MediaCreator.SetContext
MediaRequestHandler.RedirectIfUsershouldbloggedin
WebDavMediaRequestHandler.ProcessRequest
“Initalize”
(包括引号)找到了这一点,它找到了以下内容:
运行(“初始化”,新的PipelineArgs());
我决定尝试为Sitecore 7.2的干净安装添加一些调试。 我创建了以下简单类:
using Sitecore.Diagnostics;
using Sitecore.Pipelines;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Web;
namespace SCMVC72.Pipelines
{
public class DebugStackTrace
{
public void Process(PipelineArgs args)
{
StackTrace st = new StackTrace();
Log.Info(string.Empty, (object)this);
Log.Info("*********************************************************************", (object)this);
Log.Info("Debug StackTrace", (object)this);
Log.Info(st.ToString(), (object)this);
Log.Info("*********************************************************************", (object)this);
}
}
}
我在App\u config\Include
文件夹中添加了以下配置文件:
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<pipelines>
<initialize>
<processor type="SCMVC72.Pipelines.DebugStackTrace, SCMVC72"
patch:before="processor[@type='Sitecore.Pipelines.Loader.ShowVersion, Sitecore.Kernel']" />
</initialize>
</pipelines>
</sitecore>
</configuration>
这是在著名的
5764 14:38:08 INFO
5764 14:38:08 INFO **********************************************************************
5764 14:38:08 INFO **********************************************************************
5764 14:38:08 INFO Sitecore started
5764 14:38:08 INFO Sitecore.NET 7.2 (rev. 140228)
这证实了HRH John West在写“这发生在一个模糊的程序集中”——更准确地说是Sitecore.Nexus时所说的话。现在有兴趣知道是谁调用
InitializeContext
方法以及何时调用。我猜,如果SetActiveSite
运行Initialize
管道,这意味着HttpBeginRequest
管道必须已经运行了(因为这是确定站点、上下文项、用户等的管道),我快速查看了一下。它被称为作业
管道的一部分。在web.config中搜索InitializeContext
,这样看起来就像是创建了一个“人工”上下文。这篇文章提到了这一点,是的,我也发现了这一点。退一步说,整个调查是从试图了解谁调用/何时调用mvc.beginRequest
管道开始的。我发现它是由RouteHttpHandler.BeginRequest()
调用的,它是由RouteHandlerWrapper.GetHttpHandler()
调用的,它是在执行初始化
管道期间调用的。现在我发现每当运行作业时都会发生这种情况。但是作业是在不同的线程中运行的,所以我认为这不是正确的执行路径。。。丢失:)HRH John west声明:初始化Sitecore应用程序“
。在所有可能的情况下,这发生在一个模糊的程序集中,所以没有太多的机会跟踪它。
5764 14:38:08 INFO
5764 14:38:08 INFO **********************************************************************
5764 14:38:08 INFO **********************************************************************
5764 14:38:08 INFO Sitecore started
5764 14:38:08 INFO Sitecore.NET 7.2 (rev. 140228)