针对 RIA Services 解决方案的部署的疑难解答

解决 WCF RIA Services 解决方案的问题颇具挑战性,因为异常可能发生在许多不同层中的任何一层。若要高效率地解决您的应用程序中的问题,您需要理解这些不同的层是如何报错的。本主题介绍这些层并且提供了用于在发生异常时解决您的 RIA Services 应用程序的问题的一些方法。此外,在部署 RIA Services 时可能遇到的许多问题已在新的部署指南中预先考虑,有关详细信息,请参见部署 RIA Services 解决方案指南

异常流

在 RIA Services 应用程序中,异常按以下顺序从最低的始发层流到客户端:

  1. 域服务

  2. RIA Services 服务主机

  3. WCF

  4. ASP.NET

  5. IIS

  6. Silverlight 应用程序

层中的异常流

启用详细的 ASP.NET 错误信息

默认情况下,Web.config 文件的 customErrors 元素设置为 RemoteOnly,这意味着远程客户端将不会接收详细的 ASP.NET 错误信息。若要调试您的应用程序,请将 customErrors 设置为 Off,以便您可以看到来自客户端的详细 ASP.NET 错误。

note注意:
不要通过将 customErrors 设置为 Off 使您的应用程序公开,因为错误消息可能会向用户暴露敏感信息。

使用 Fiddler 检查错误

源自域服务内的所有异常都将发送到 Silverlight 客户端,同时发送的还有错误状态代码 200。在 WCF 层或更低层引发的所有异常都将发送到 Silverlight 客户端,同时发送的还有状态代码 404。您可以运行 Fiddler HTTP 调试器以便查看实际错误。

直接浏览到域服务

直接浏览到您的域服务的 .svc 文件通常会对您很有帮助,因为可帮助您查看 WCF 服务是否可用。但是,确定 .svc 文件的路径并不简单,因为 .svc 在您的解决方案中不存在。您可以通过使用以下模式在 Web 浏览器中直接浏览到域服务:

http://[host]/[域服务的修改的类名].svc

通过使用全限定类名并且使用短划线 (-) 来替换每个句点 (.),确定已修改的类名。因此,具有以下名称的域服务:

ExampleApplication.Web.CustomerDomainService

将具有名称如下的一个 .svc 文件:

ExampleApplication-Web-CustomerDomainService.svc

如果该文件在 localhost 上承载,则您可以通过导航到以下位置直接浏览到该文件:

https://localhost/ExampleApplication-Web-CustomerDomainService.svc

如果该服务可用,您将看到一个网页,其中包含与服务以及如何测试服务有关的信息。如果该服务不可用,您将看到一个错误页,该页可能具有将帮助可您确定问题的信息。如果收到一个错误,则异常可能源自 RIA Services 服务主机层。

重写域服务 OnError 方法

在处理 DomainService 操作的过程中发生无法恢复的错误时,调用 OnError 方法。您可以重写此方法以便在发送到客户端之前检查是否有错误。

使用传统的 WCF 跟踪方法

您就像解决任何 WCF 服务问题一样解决 WCF 层处的异常问题。有关 WCF 服务的诊断跟踪的更多信息,请参见跟踪

源自 WCF 层的异常将不在 Fiddler 中出现。您可以通过尝试浏览到 .svc 文件,排除服务异常。如果您可以成功浏览到该 .svc 文件,但服务在运行时失败,则异常可能源自 WCF 层。

检查 ASP.NET 和 IIS 设置

对于在 ASP.NET 和 IIS 层引发的异常,来自您的 RIA Services 应用程序的信息将不包括在堆栈中。在如下情形下您可能会看到该级别的异常:

  • 对于您正在使用的 IIS 版本,该 Web.config 文件不具有正确的 HttpModule 元素。

  • WCF 未在您的 Web 服务器上激活。