Sitecore 从ASHX处理程序跟踪页面事件

Sitecore 从ASHX处理程序跟踪页面事件,sitecore,ashx,sitecore8,sitecore8.1,sitecore-analytics,Sitecore,Ashx,Sitecore8,Sitecore8.1,Sitecore Analytics,我目前正在尝试跟踪ASHX处理程序中的PageEvent。我的代码基本上如下所示: public class GetProductPdf : IHttpHandler { public void ProcessRequest(HttpContext context) { if (!Tracker.IsActive) { Tracker.Initialize(); Tracker.StartTrack

我目前正在尝试跟踪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;
        }
    }
}
跟踪器始终处于非活动状态,跟踪器.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
我尝试了所有可能的解决方案

在mvc控制器中执行相同操作时,跟踪器处于活动状态,跟踪器为当前状态!=空

有没有人有什么想法,是什么原因造成的,或者有没有其他解决方案的建议


提前感谢。

我不确定您的
Ashx处理程序能否在必要的Sitecore上下文中执行,这样
Tacker.Current
将无效,也无法通过
Tracker.StartTracking()启动。有人可能会确认,但我有另一个解决方案,你可以尝试,这对我的工作

对于
Ashx处理程序
来说,为您注册
事件
非常好,但是您可以在指向文件的链接上启动一个JavaScript函数。因此,当点击链接时,JavaScript向
MVC控制器发出web请求,控制器为您注册事件

我自己使用
WebApi控制器
实现了这一点<代码>数据属性
位于
a标记上,JavaScript将这些属性发布到控制器,控制器使用这些属性确定要注册的
事件
,以及要在事件上使用的
描述


您可能需要查看,向下滚动到“在xDB中存储自定义数据”部分。

您是如何注册处理程序的?如果您以注册
sitecore\u media\u处理程序的相同方式执行此操作,那么您将拥有有效的sitecore上下文。我认为这是一个时间问题,处理程序启动得太早了。有一个初始化跟踪程序的管道,所以您不需要这样做。如果在此之后调用了代码,那么跟踪器应该可以正常工作。但是,如果您确实需要调用initialize,我很确定它依赖于会话是否可用,因此您可以尝试向处理程序添加IRequiresessionState。这完全取决于您注册处理程序的方式。媒体请求由具有有效Sitecore上下文的处理程序提供服务。您只需向Sitecore注册,而不是以标准的.net方式。很高兴知道,在向Sitecore注册后,看看OP是否能正常工作会很有趣谢谢您的回答。我自己也考虑过第一个解决方案,但由于会有来自外部来源的请求,我们也希望跟踪,这不是一个选项。该处理程序实际上是以sitecore方式注册的。我也看到了解决方案,但不是针对我。显然,在调试了几个小时后,没有做任何重大更改,跟踪器开始无缘无故地工作。。。我不知道,为什么它现在起作用,或者为什么它以前不起作用,但现在它起作用了。还是谢谢你的帮助和时间。