我有一个在浏览器中运行的silverlight应用程序,作为整个ASP.NET网站的一部分。我正在做一些事件记录(跟踪一些UI点击事件等)。
我设置了一个WCF服务来创建数据库日志记录,显然Silverlight应用程序是异步调用它。
这一切都运行得很好,直到我尝试在应用程序生命周末发出对日志服务的调用。也就是说,当用户点击某个按钮时,silverlight会调用网站上的一些javascript来重定向到另一个页面,因此Silverlight应用程序会关闭,然后有时只会执行最后一次记录器调用。
我假设它与silverlight的关闭程序有关,并且这是一个时间问题,有时WCF通道仍然打开并且消息通过,有时通道关闭而日志记录不会发生。
无论是否发生日志记录,最后一次记录器调用都不会触发回调。
作为上次关闭点击事件的处理程序的一部分,silverlight应用程序将其称为:
System.Windows.Browser.HtmlPage.Window.Eval("ViewEmployersPageWithMenu();")
根据我的理解,当浏览器离开它时,会触发Silverlight应用程序的退出。
在此之前,我启动了对异步wCF服务的简单记录器调用。
我认为Silverlight在退出处理期间不允许异步服务调用,是这种情况吗?如果有不同的方式我应该处理这个o在应用程序关闭之前成功调用该日志?
答案 0 :(得分:0)
如果日志记录非常重要并且被认为是应用程序的一个组成部分,那么在回调日志记录请求之前,您可以暂停调用JavaScript函数。它可能会导致重定向执行有一些延迟,因为它现在正在等待WCF请求往返,但也许这可能是丢失日志的首选。
如果你可以复制这个问题,我会很好奇Fiddler在它工作时看到的一系列请求(记录请求和重定向请求)与没有这样做的时间。这可能表明浏览器在执行重定向时正在取消日志请求。