【发布时间】:2016-02-24 08:57:21
【问题描述】:
我目前正在尝试在 ASHX 处理程序中跟踪 PageEvent。我的代码基本上是这样的:
public class GetProductPdf : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
if (!Tracker.IsActive)
{
Tracker.Initialize();
Tracker.StartTracking();
}
//Track PageEvent here...
}
public bool IsReusable
{
get
{
return false;
}
}
}
Tracker 始终处于非活动状态,并且 Tracker.Current == null。在方法调用“Tracker.StartTracking();”抛出以下异常:
[InvalidOperationException: Tracker.Current is not initialized]
Sitecore.Analytics.Pipelines.StartAnalytics.StartTracking.Process(PipelineArgs args) +317
(Object , Object[] ) +83
Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args) +445
Project.Web.Handler.PdfCreation.GetProductPdf.ProcessRequest(HttpContext context) in d:\Project\Website\Handler\PdfCreation\GetProductPdf.ashx.cs:69
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +913
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +165
我尝试了here建议的所有可能的解决方案。
在 mvc 控制器中执行相同操作时,Tracker 处于活动状态并且 Tracker.Current != null。
有没有人有想法,可能是什么原因造成的,或者有其他解决方案的建议吗?
提前致谢。
【问题讨论】:
-
你是如何注册你的处理程序的?如果您以与注册
sitecore_media_handler相同的方式执行此操作,那么您将拥有一个有效的 Sitecore 上下文。 -
我认为这是一个时间问题,处理程序开得太快了。有一个用于初始化跟踪器的管道,因此您不需要这样做。如果在此之后调用您的代码,那么 Tracker 应该可以正常工作。但是,如果您确实需要调用初始化,我很确定它依赖于会话可用,因此您可以尝试将 IRequiresSessionState 添加到您的处理程序中。
标签: sitecore ashx sitecore8 sitecore8.1 sitecore-analytics