【问题标题】:Why doesn't my Azure WCF service ever go from Busy to Ready?为什么我的 Azure WCF 服务从未从忙碌状态变为就绪状态?
【发布时间】:2011-05-05 05:52:50
【问题描述】:

我有一个有效的 WCF 服务和辅助角色,我一直在 Azure Development Fabric 上进行本地调试。一切都很好,但现在我正尝试将它部署到暂存环境中的云中,我发现了一些奇怪的问题。

  1. 我的工作角色比服务复杂得多,但工作正常。它从初始化 -> 忙碌 -> 就绪。
  2. 但是,我的服务角色从 Initializing -> Busy 然后状态不再改变。

我已经阅读了一些关于 Initialize -> Busy -> Stopping loops 的文章,但这不是我看到的行为。事实上,当我尝试使用 IntelliTrace 时,我无法访问该服务的任何日志,因为它从未进入无响应状态。我可以访问成功加载的辅助角色的日志。

如果我看不到任何日志或附加调试器来弄清楚发生了什么,我应该如何解决这个问题?同样,这项服务在我的本地环境中运行良好。

在有人建议之前,我已经做了以下事情:

  1. 检查DiagnosticsConnectionString 并确保它已连接到我的存储帐户
  2. 在部署中启用 IntelliTrace。
  3. 检查所有引用的程序集,确保非 .NET 程序集“复制到本地 = true”

如果 Azure 公开某种控制台,这样我就可以看到发生了什么,那肯定会很棒。

【问题讨论】:

    标签: c# wcf azure


    【解决方案1】:

    今年晚些时候,您将能够使用远程桌面连接并查看发生了什么。

    目前,您可以联系支持人员,他们应该能够提供帮助。

    通常,“忙碌”是您仍在 OnStart() 中执行代码时所处的状态。您的 OnStart() 实施是否有可能没有返回? (或者也许是一些构造函数?)

    【讨论】:

    • 我只执行了一行代码……它是一个 RouteTable.Routes.Add()——你知道这在 Azure 上是否被禁止吗?
    • 不,应该可以,但这很可能在 Global.asax.cs 中的某个地方(而不是在 WebRole.cs 中的 OnStart() 中),对吧?
    【解决方案2】:

    根据我的经验,当 Azure 在生产中开始播放黑盒时,这是由配置问题引起的。可能的原因之一 - 配置部分在您的本地计算机上被识别,但在 Windows Azure 来宾操作系统上不可用。

    在这种情况下,您的角色甚至没有机会向 IntelliTrace 或任何记录器(未加载)说些什么。

    例如,如果您的 web.config 中有 uri 配置部分,那么它可能在本地工作,但会导致 Azure 冻结生产中的 Web 部署。修复(在这种情况下):

    将以下行添加到配置/配置部分:

    <section name="uri" type="System.Configuration.UriSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    

    您的情况可能不同。只需查找任何不常见的配置或案例,其中架构可能对您正在运行的 Azure 来宾操作系统是未知的。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,最终从一个空白项目开始。让它在云中运行。添加了几行代码,正在部署。

      最终(在 10 次部署之后......你知道这需要多长时间吗???)我让它工作了......原因在配置文件中。不过我没有追查到一行。

      按照 smarx 的建议,联系支持人员是正确的做法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-10
        • 1970-01-01
        • 2022-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多