导出 (0) 打印
全部展开

Service Bus 故障排除

更新时间: 2014年6月

以下各部分描述了在编写用于 Microsoft Azure Service Bus 的应用程序时可能会发生的问题以及相应的解决方法。

以下各部分描述了如何对 Service Bus 应用程序进行故障排除。

症状

Service Bus 应用程序在 Deployment Fabric 中运行时无任何错误,但在部署到 服务器后发生崩溃。

原因

Service Bus 程序集当前未集成到 平台中。因此,应用程序尝试访问的是服务器上不存在的程序集。

解决方法

将 Service Bus 程序集添加到部署包中(例如,将程序集设置为“本地副本”)。因此,请注意,你必须手动更新程序集。

症状

应用程序在以编程方式设置终结点时工作正常,但在相关联的 App.config 文件中存储这些相同的配置设置时却失败。应用程序生成以下错误:

System.Configuration.ConfigurationErrorsException:找不到配置绑定扩展名 'system.serviceModel/bindings/netTcpRelayBinding'。验证此绑定扩展名是否在 system.serviceModel/extensions/bindingExtensions 中正确注册以及拼写是否正确。

原因

Service Bus 程序集当前未集成到 平台中。在本地计算机上,如果安装有 SDK,则将修改 Machine.config 文件,以添加多个 Windows Communication Foundation (WCF) 扩展名,如 NetTcpRelayBinding。然后,应用程序会在 Machine.config 文件中查找相关信息,如 netTcpRelayBinding 部分的信息。这不会发生在 平台上,因此,应用程序找不到相关信息。

解决方法

要使配置可用于 ,请将扩展名从本地的 Machine.config 文件复制到 App.config 文件。否则,将无法识别 netTcpRelayBinding 之类的标记。不过,如果你执行此操作,则应用程序将因扩展名重复而无法在本地运行。因此,你必须保留 App.config 文件的两个版本;一个保留在本地,而另一个用于 。建议你以编程方式执行此特定任务。

以下疑难解答主题介绍如何与 Service Bus 相连。稍后如果在本部分找不到解决方法,则可能需要考虑以下某种可能:

  • 运行网络跟踪 - 网络可能已关闭。使用网络监视器确定网络的状态可能有助于调试问题。

症状

尝试通过客户端应用程序连接到 Service Bus 时,你收到以下错误:

未处理的异常:System.ServiceModel.EndpointNotFoundException:找不到终结点。请确保可使用 HTTP 端口 80 和 TCP 端口 808 与 Internet 相连。

原因

导致此错误的原因可能有多种。

解决方法

  • 查看主机是否处于运行状态。如果不处于运行状态,则表明不存在可连接的终结点。你可以使用如下所示的两个过程之一来运行服务:

    1. 调试模式 - 在 Visual Studio 的“解决方案资源管理器”中,右键单击服务项目,再单击“调试”。然后,单击“启动新实例”。服务启动之后,请对客户端重复执行此过程。请注意,即使服务已处于运行状态,你也可以调试客户端。

    2. 外部调试模式 - 将服务项目设置为启动项目。在“调试”菜单中,单击“开始执行(不调试)”。这样做后,即使运行服务应用程序,Visual Studio 也不会受到影响。服务启动之后,将客户端项目设置为启动项目,然后运行该项目。

  • 确保已将 Microsoft.ServiceBus.dll 程序集(位于 Visual Studio 中)的“本地副本”属性设置为“true”。云服务器上未安装 SDK。因此,你必须将程序集包括在包中。如果没有该程序集,则辅助角色将无法正常运行。

  • 确认你事实上可以使用 HTTP 端口 80 和 TCP 端口 808 与 Internet 相连。

症状

应用程序无法连接到 Service Bus,但返回以下错误消息:

“客户端无法在配置的超时时间 (00:01:00) 内完成安全协商。当前的协商时长为 1 (00:00:59.9429968)。”

原因

可能未正确设置身份验证凭据。

解决方法

查看是否要对客户端进行身份验证。具体而言,可查看是否已将 RelayClientAuthenticationType 设置为 None。默认情况下,值为 RelayAccessToken,即要求你提供身份验证声明,如共享机密。不过,如果手动将该值设置为 None,则客户端不必提供任何身份验证。

如果尚未设置身份验证类型,则身份验证类型可能是 RelayClientAuthenticationType,其默认值为 RelayAccessToken。如果属于这种情况,请查看是否正确指定了身份验证声明。有关详细信息,请参阅 TechNet 上的 保护和验证 Service Bus 连接.

症状

尝试连接到 Service Bus 时,你收到以下错误:

“验证消息安全时出错”

原因

导致此错误的一个可能原因是,本地计算机上的 UTC 时间超前于 Service Bus 服务器上的 UTC 时间。例如,本地 UTC 时间戳可能是 8:06,而服务器上的时间戳是 8:05。服务器将此时间戳视为无效,因此会生成“症状”部分所提到的错误消息。

解决方法

确认本地计算机上的 UTC 时间正确无误。如有必要,可手动将时钟往回拨几分钟。Service Bus 不会将时间略早的消息视为安全冲突,而只将看似来自遥远未来的消息视为安全冲突。

症状

无法在 ATOM 源中找到服务,即使知道该服务正在成功运行也是如此。

原因

服务注册表的默认行为是不通过 ATOM 源显示服务。

解决方法

将终结点设置为可发现的终结点,如如何:将服务发布到 Service Bus 注册表所述。

显示:
© 2014 Microsoft