Silverlight 中的客户支持






4.74/5 (16投票s)
截取正在运行的 Silverlight 应用程序的屏幕截图,并将其提交到您的 Web 服务器,包括大量系统信息
引言
想象一下以下情况
- 您构建了世界上最好的 Silverlight Twitter 客户端,但时不时地 您的应用程序会崩溃
或者 - 您部署了您优秀的 Silverlight 业务应用程序,但您不知道 人们是否喜欢它
或者 - 时不时地,您会收到来自客户的 电话:“我无法看到详细信息”
怎么回事?
那么您该怎么办?
与其进行无休止的支持电话、电子邮件对话、日志文件中的跟踪、日志数据库中的查找等,不如使用下面的反馈控件

使用此反馈控件,您将获得
- 用户当前正在查看的屏幕截图
- 所有系统信息,例如
- 操作系统版本
- 上次重启
- Silverlight 版本
- 您的应用程序版本
- ……以及更多…
背景
- 我们使用来自 Codeplex 的这个不错的 ImageTools 库(可以在那里找到
PNGEncoder
)来 将 Bitmap 转换为 PNG。 - 文件上传通过服务器端一个简单易用的
HTTPHandler
完成,它接收 PNG 并将其保存到特定文件夹。
有关更多信息,请参阅 Tim Heuer 的视频,了解 使用源代码在 Silverlight 中上传文件。
操作指南
- 我们使用 WriteableBitmap 创建当前 Silverlight 应用程序的屏幕截图
feedback.ScreenShot = new WriteableBitmap(this.LayoutRoot, null);
- 我们使用诸如以下类在 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);
- 我们将屏幕转换为 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
- 将反馈控件复制到您的 Silverlight 应用程序。
- 修复上传 URL
string _baseUrl = "http://{0}/Silverlight-Feedback/UploadHandlers/";
- 下载 ImageTools 库 并将 3 个引用添加到您的 Silverlight 应用程序
ImageTools
ImageTools.IO.Png
ImageTools.Utils
- 在您的“反馈”按钮或“关于”按钮上插入以下代码
// Show window and we are done FeedbackWindow feedback = new FeedbackWindow(); feedback.ScreenShot = new WriteableBitmap(this.LayoutRoot, null); feedback.Show();
完成 - 玩得开心!
其他用途
在启动或注销您的 Silverlight 应用程序时,主动报告使用情况……
无需用户交互即可执行此操作……
请务必在某个地方包含 隐私声明。;-)
历史
- 来自我博客文章的第一次上传:http://blog.gfader.com/2010/06/customer-support-in-silverlight.html
- 2010-06-08-07h59:修复了拼写错误,并添加了“其他用途”场景