65.9K
CodeProject 正在变化。 阅读更多。
Home

Silverlight 中的客户支持

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.74/5 (16投票s)

2010年6月7日

CPOL

2分钟阅读

viewsIcon

51270

downloadIcon

447

截取正在运行的 Silverlight 应用程序的屏幕截图,并将其提交到您的 Web 服务器,包括大量系统信息

引言

想象一下以下情况

  • 您构建了世界上最好的 Silverlight Twitter 客户端,但时不时地 您的应用程序会崩溃
    或者
  • 您部署了您优秀的 Silverlight 业务应用程序,但您不知道 人们是否喜欢它
    或者
  • 时不时地,您会收到来自客户的 电话:“我无法看到详细信息”
    怎么回事?

那么您该怎么办?

与其进行无休止的支持电话、电子邮件对话、日志文件中的跟踪、日志数据库中的查找等,不如使用下面的反馈控件

使用此反馈控件,您将获得

  1. 用户当前正在查看的屏幕截图
  2. 所有系统信息,例如
    1. 操作系统版本
    2. 上次重启
    3. Silverlight 版本
    4. 您的应用程序版本
    5. ……以及更多…

背景

  1. 我们使用来自 Codeplex 的这个不错的 ImageTools 库(可以在那里找到 PNGEncoder )来 将 Bitmap 转换为 PNG
  2. 文件上传通过服务器端一个简单易用的 HTTPHandler 完成,它接收 PNG 并将其保存到特定文件夹。
    有关更多信息,请参阅 Tim Heuer 的视频,了解 使用源代码在 Silverlight 中上传文件

操作指南

  1. 我们使用 WriteableBitmap 创建当前 Silverlight 应用程序的屏幕截图
    feedback.ScreenShot = new WriteableBitmap(this.LayoutRoot, null); 
  2. 我们使用诸如以下类在 Silverlight 中收集系统信息
    • 环境
    • HtmlPage.Document
    • HtmlPage.BrowserInformation
    • Application.Current.Host
    // Collect system info
    StringBuilder sbStringBuilder = new StringBuilder();
    
    sbStringBuilder.AppendLine("OSVersion: " + Environment.OSVersion);
    sbStringBuilder.AppendLine("System start: " + 
    	Environment.TickCount.ConvertToNiceTime());
    sbStringBuilder.AppendLine("CLR Version: " + Environment.Version); 
  3. 我们将屏幕转换为 PNG,然后通过 WriteableBitmap 上传到我们的服务器
    ImageTools.Image image = ImageTools.ImageExtensions.ToImage(_screenShot);
    
    using (MemoryStream writestream = new MemoryStream())
    {
        PngEncoder encoder = new PngEncoder();
        encoder.Encode(image, writestream);
    
        byte[] bytes = writestream.ToArray();
    
        MemoryStream readStream = new MemoryStream(bytes);
    
        UploadFile(readStream);
    } 

一旦我们在服务器上有了屏幕和系统信息,我们就可以发送电子邮件,在 TFS 或您最喜欢的错误跟踪系统中创建工作项……

Using the Code

  1. 将反馈控件复制到您的 Silverlight 应用程序。
  2. 修复上传 URL
    string _baseUrl = "http://{0}/Silverlight-Feedback/UploadHandlers/"; 
  3. 下载 ImageTools 库 并将 3 个引用添加到您的 Silverlight 应用程序
    1. ImageTools
    2. ImageTools.IO.Png
    3. ImageTools.Utils
  4. 在您的“反馈”按钮或“关于”按钮上插入以下代码
    // Show window and we are done
    FeedbackWindow feedback = new FeedbackWindow();
    feedback.ScreenShot = new WriteableBitmap(this.LayoutRoot, null);
    feedback.Show();

完成 - 玩得开心!

其他用途

在启动或注销您的 Silverlight 应用程序时,主动报告使用情况……
无需用户交互即可执行此操作……
请务必在某个地方包含 隐私声明。;-)

历史

© . All rights reserved.