帖子标记记录
Silverlight的航行日志记录在3测试版
通过张贴david.poll在Silverlight中关于2009年5月12日
我最近一直在打我的Web服务器 - 我最近从一个托管ASP.NET服务切换到一个虚拟专用服务器,所以我得到一个机会,有玩了我的第一次服务器的完全控制。我花了一段时间成立伐木和服务器上的统计使用IIS的日志记录功能和一些第三方的日志处理软件。经该测井资料是非常宝贵的除其他事项外 - ,它帮助我知道哪些网页乡亲有兴趣,并让我深入了解是否它太难以达到我的网页中的某些章节。随着导航控件在Silverlight 3测试版SDK的同时,有一个记录解决方案,我的网络服务器与合作,似乎只有谨慎!
蒂姆豪雅表有一个伟大的博客12月有关使用后从Silverlight应用程序与谷歌分析事件跟踪的 。我的印象是,这种做法将工作与控制以及新的导航,但我是IIS寻找一个简单的解决方案,将新增项目到我直接从Silverlight应用(原木,而不必添加任何JavaScript或使用HTML桥)。
眼下的问题是,导航控制后使用的“#”符号在URL的URI片段(文字),以确定哪些网页浏览到一个框架控件。结果(这是正确的),deeplinks到的Silverlight控制或导航发生在Silverlight控件从未往返服务器,所以没有办法让服务器日志的发生。
因此,我的方法相当简单:一个HTTP请求到服务器托管,它将记录任何时候我的框架是导航。
在实验过程中我的要求:
- 再利用内置的日志我的Web服务器(IIS 7中的功能,但我想这将工作更广泛地)
- 确保在我的申请记录个人独特的URI(以便查询字符串,自定义的URI等不会丢失数据的记录)
- 避免限制,要求桥是可访问的HTML或需要其他文件的应用程序被添加到我的网站如JavaScript文件或其他ASP.NET页面()
原来,这是不那么困难的事!我的项目开始与Silverlight的导航应用程序模板,船舶与Silverlight的3 Beta版的Visual Studio工具来混合出在这。我得到这个项目模板设置一些与一帧,页,并导致一些按钮框架导航 - 一切一新生导航应用程序需要做大,做强!
我在开始处理MainPage.xaml框架控件的“航海下西洋”事件:
: Frame x : Name ="Frame" Source ="/Views/HomePage.xaml" < 导航 : 帧 X: 名称 =“框架” 源 =“/查看/ HomePage.xaml” 导航 =“Frame_Navigated” HorizontalContentAlignment =“拉伸” VerticalContentAlignment =“拉伸” 填充 =“15,10,15,10” 背景 =“白”/>
用简单的一部分的方式进行(谁知道?),我开始与WebRequest和WebClient的比赛,直到我想出了一些似乎符合我的需求了:
sender, NavigationEventArgs e) { Uri uri = new Uri ( Application .Current.Host.Source.ToString() + "?nav=" + Uri .EscapeDataString(e.Uri.ToString())); WebRequest wc = WebRequest .Create(uri); wc.Method = "POST" ; wc.BeginGetResponse((res) => { WebResponse wr = wc.EndGetResponse(res); }, this ); } 私人无效 Frame_Navigated( 对象发件人,NavigationEventArgs五)( 乌里的uri = 新 的Uri(应用 。Current.Host.Source.ToString()+“?资产净值=”+ 乌里 。EscapeDataString(e.Uri.ToString ())); 的WebRequest WebRequest的厕所=。创建(URI)的; wc.Method =“POST”的 ; wc.BeginGetResponse((水库)=>“(= wc.EndGetResponse WebResponse水利(水库);), 这一点 );)
我会走过这条路线逐线,并解释我的想法:
Uri ( Application .Current.Host.Source.ToString() + "?nav=" + Uri .EscapeDataString(e.Uri.ToString())); 乌里的uri = 新 的Uri(应用 。Current.Host.Source.ToString()+“?资产净值=”+ 乌里 。EscapeDataString(e.Uri.ToString ()));
在这里,我需要拿出一个文件我知道这样做对服务器上存在了,这是不会有任何语义,我会被要求作出了压倒一切的。此外,我想选择一个文件,将唯一标识的Silverlight应用程序正在请求。似乎合乎逻辑,然后使用我为此Silverlight应用程序的XAP文件!接下来,我添加了一个查询字符串将要发送到服务器,将独特的识别的URI,该框架使用。结果,如果源URI为“/查看/ HomePage.xaml”(如在XAML中所示),由此产生的URI是:“http://yourservername.com/yourSilverlightApp.xap?资产净值=%2FViews%2FHomePage.xaml。“好吧,好吧,这不是漂亮(感谢URI的编码),但它的把戏。查询字符串这里从来没有被使用,但它确实可以发送到服务器,并记录,其中留下的痕迹正是我一直在寻找我!
下一篇:
.Create(uri); WebRequest的厕所= 的WebRequest。创建(URI)的; wc.Method =“POST”的 ;
从上述两行的重要收获是,我用的HTTP POST方法。我花了一堆时间尝试使用GET,使测井发生,但它有两个重要的缺点:
- 每个请求将重新下载的XAP,这是远远比我想更多的数据传输只是为了让伐木去
- WebRequest和WebClient中都使用浏览器的缓存(我无法找到一个替代方法,不涉及修改查询字符串,这将有凿沉我的方法),这样重复,在Silverlight应用程序访问到相同的页面没有其实永远到达服务器并获得登录
最后:
); wc.BeginGetResponse((水库)=>“(= wc.EndGetResponse WebResponse水利(水库);), 这一点 );
这只是拍摄过的Web请求。没有什么特别突出的在这里指出,除了反应是完全被忽略。
就是这样!
下面是直接从我的IIS的证明,在W3C的日志格式(...知识产权的节录):
2009年5月13日4时41分06秒的POST /样本/ LoggedSilverlightNavigation /为ClientBin / LoggedSilverlightNavigation.xap资产净值=%2FViews%2FAboutPage.xaml - <IP地址>Redacted> HTTP/1.1中Mozilla/4.0 +(兼容; +的MSIE +8.0; +视窗+新台币6.1; +的WOW64; + Trident/4.0; + SLCC2; +。NET中的CLR +2.0.50727 +; +。NET中的CLR +3.5.30729 +; +。NET中的CLR +3.0.30729 +,+ +媒体中心+电脑6.0) - 405 1496
2009年5月13日4时41分06秒的GET /饲料= rss2 - <IP地址>Redacted> HTTP/1.1中Windows-RSS-Platform/2.0 +(的MSIE 8.0; + +的Windows NT的6.1) - 304 475
2009年5月13日4时41分06秒的POST /样本/ LoggedSilverlightNavigation /为ClientBin / LoggedSilverlightNavigation.xap资产净值=%2FViews%2FHomePage.xaml - <IP地址>Redacted> HTTP/1.1中Mozilla/4.0 +(兼容; +的MSIE +8.0; +视窗+新台币6.1; +的WOW64; + Trident/4.0; + SLCC2; +。NET中的CLR +2.0.50727 +; +。NET中的CLR +3.5.30729 +; +。NET中的CLR +3.0.30729 +,+ +媒体中心+电脑6.0) - 405 1496
2009年5月13日4时41分08秒的POST /样本/ LoggedSilverlightNavigation /为ClientBin / LoggedSilverlightNavigation.xap资产净值=%2FViews%2FAboutPage.xaml - <IP地址>Redacted> HTTP/1.1中Mozilla/4.0 +(兼容; +的MSIE +8.0; +视窗+新台币6.1; +的WOW64; + Trident/4.0; + SLCC2; +。NET中的CLR +2.0.50727 +; +。NET中的CLR +3.5.30729 +; +。NET中的CLR +3.0.30729 +,+ +媒体中心+电脑6.0) - 405 1496
2009年5月13日4时41分08秒的POST /样本/ LoggedSilverlightNavigation /为ClientBin / LoggedSilverlightNavigation.xap资产净值=%2FViews%2FHomePage.xaml - <IP地址>Redacted> HTTP/1.1中Mozilla/4.0 +(兼容; +的MSIE +8.0; +视窗+新台币6.1; +的WOW64; + Trident/4.0; + SLCC2; +。NET中的CLR +2.0.50727 +; +。NET中的CLR +3.5.30729 +; +。NET中的CLR +3.0.30729 +,+ +媒体中心+电脑6.0) - 405 1496
而更多的证据从我的第三方统计工具(无视大转移规模...他们是我的测试GET方法,其中移送几百KB的每个请求)工件:

如果你好奇下载的代码(它并不比你已经看到了!),在这里你可以找到它: LoggedSilverlightNavigation.zip
有一定还有改进的余地的,但。有一件事情我想要得到的工作最终是设置HTTP请求标头的引荐到一个连贯的价值,这样我可以跟踪人们从我的页面到页面中的应用-但这是一个很好的第一步。
我希望您发现有帮助!如果任何人有任何/技巧/导航过关其他建议,请随时让我知道!这只是我的实验结果,所以如果你有一个更好的方式,随时评论!
聚苯乙烯仍然没有正确的反应狩猎从我上次张贴到我的复活节彩蛋!不要放弃!我会后回答这个星期晚些时候。
聚苯硫醚马克怪物有很大的博客员额从几个月前他对Silverlight的跟踪分析支持谷歌 。我想像你可以使用类似的技术来完成此类型的日志记录我做的事。
测井 , 导航 , Silverlight的 , Silverlight的3 Beta版
标签
。NET的放射免疫服务 活动控制 授权 混纺 BusyIndicator CollectionView ContentLoader 控件 数据绑定 动态导航的 乐趣 柯纳米代码 记录 的MIX '10 导航 题外话 外的浏览器 的PDC PDC09 个人 印刷 项目 相关链接 服务器 的Silverlight Silverlight的3 Silverlight的3 Beta版 的Silverlight 4 的Silverlight 4测试版 的Silverlight 4区局 Silverlight和超越(板) 的Silverlight工具包 网站 的TechEd 技术教育大会2010年北美 信任的应用 验证 的Visual Studio 2010 WCF的放射免疫服务 的XAML XamlSerializer叽叽喳喳:@ depoll
- @ JeffHandley认为自己是全球化的。 ;)2010年8月13日8:30
- @ rburger这是一个令人难以置信的合唱团-值得考虑看看他们是否在附近 2010年8月6日4:54
- @ rburger他们一直在当时的国际冠军后的时间(他们是去年底价-无法赢得30年来第一次,他们所做的 )2010年8月6日4:53
免责声明
关于这个网站的内容代表我个人的意见在发布时间和想法,并不能反映我的雇主以任何方式。










