【问题标题】:Microsoft Azure MVC 3 web role not starting after adding TwilioController base class inheritance添加 TwilioController 基类继承后,Microsoft Azure MVC 3 Web 角色未启动
【发布时间】:2016-03-11 05:39:26
【问题描述】:

Azure Web 角色(MVC 3 项目)不会从 Twilio 控制器类开始

  • 我有一个托管在 MS Azure 上的 MVC 3 应用程序。它发布到 Azure Web 角色 - 没问题。
  • 我添加了 Nuget Twilio 和 Twilio.Mvc 包。它仍然发布到 Azure Web 角色 - 没问题。
  • 我添加了一个继承自 Mvc.TwilioController 基类的类,随后 Azure Web 角色不再启动。
  • 如果我删除 TwilioController 类继承,Web 角色就会启动。

项目在我的本地 VS Azure 模拟器环境中可以正常发布、运行和 twilio 功能。

项目参考; Twilio.api、Twilio.mvc、Twilio.Twiml、RestSharp 和 NewtonSoft.Json 都设置为 CopyLocal=True。

所有 Azure 诊断日志记录/跟踪均已启用并每 5 秒发送到表存储,但当 Web 角色无法启动时,没有可用的日志数据。注意:如果我注释掉 twilioController,我会得到大量日志数据,因此 Azure Diags 配置正确。

由于 Web 角色继续中止/循环/中止,因此没有机会 RDP 到 vm 以进行进一步的故障排除。


大约每分钟将以下两个错误写入失败的 Web 角色的 Windows 系统事件日志:

属于站点“1273337584”的应用程序“/”设置了无效的 AppPoolId“ca5c9ecb-e68d-4f3a-84c2-c0b4430373e9”。因此,应用程序将被忽略。

.

站点 1273337584 已被禁用,因为为站点定义的根应用程序无效。有关根应用程序无效的原因的信息,请参阅前面的事件日志消息。


重现步骤(具体步骤):

  1. Install Azure Sdk v 1.6
  2. 使用 Azure 模板 (visual studio 10 sp1) 创建一个新项目
  3. 选择 Asp.net MVC 3 Web 角色
  4. 构建并发布到 Azure
  5. 成功 - Web 角色启动
  6. 添加 Nuget 包“Twilio”版本 3.3.2
  7. 添加 Nuget 包“Twilio.Mvc”版本 3.1.3
  8. 构建并发布到 Azure
  9. 成功 - Web 角色启动
  10. 创建一个空控制器 (HelloController)。见下面的代码 sn-p。
  11. 添加 TwilioController 基类(例如 Public Class HelloController : TwilioController)
  12. 构建并发布到 Azure
  13. 失败 - Web 角色只是 cyles/aborts/cyles。
  14. 注释掉 TwilioController(例如 Public Class HelloController // :TwilioController)
  15. 构建并发布到 Azure
  16. 成功 - 网络角色开始

    using System.Web.Mvc;
    using Twilio.TwiML.Mvc;
      namespace WindowsAzureProject857481.Controllers
        {
            public class HelloController : TwilioController
            {
                //
                // GET: /Hello/
    
                public ActionResult Index()
                {
                    return View();
                }
    

任何想法表示赞赏。

谢谢, 吉姆

【问题讨论】:

  • 网络角色是否启用了 RDP?您可以登录并查看日志吗? msdn.microsoft.com/en-us/library/gg443832.aspx
  • 我启用了 RDP,但无法连接(当 Web 角色循环时,Azure 管理控制台中的“远程”按钮永远不会激活。
  • 如果您添加类似 ELMAH 的内容来捕获异常,是否会记录某些内容?
  • 我每次都可以使用 vanilla Azure Mvc 3 项目模板重现这个(参见上面的步骤)。如果有人拥有 Azure 帐户,如果您按照步骤复制我添加到问题中的步骤,我会对您的结果感到好奇。
  • 我怀疑 Azure 包缺少 twilio 依赖项,因为去年我遇到了与 Entity Framework 类似的问题,临时修复是在包中手动包含一个文件。但是,就像我在问题中提到的那样,所有 twilio、restsharp 和 newtonsof 引用都是 Copy Local = True。

标签: asp.net-mvc asp.net-mvc-3 azure twilio


【解决方案1】:

吉姆:

我为 Twilio 工作,拥有 the .NET helper library

发生的事情是 Twilio.Mvc 程序集正在寻找 System.Web.Mvc 程序集的 2.0 版本,因为这是它的构建对象。它没有找到它,因为它显然没有与您的 MVC 3 项目打包。

如果相当容易的话,修复。获取 Twilio.Mvc 源,更改对 MVC 较新版本的引用并重新编译程序集。如果您不想自己动手,我相信我们的支持团队会与您联系并提供我为您构建的版本。

如果您想尝试一下,我认为可能还有一种方法可以使用程序集绑定重定向来解决问题。

德文

【讨论】:

  • 你已经解决了这个问题!我取出 Nuget Twilio.Mvc 3.1.3 版并添加了对您提供给我的 Twilio.Mvc 的引用,该引用引用了 System.Web.Mvc 3.x 并解决了问题。希望 Twilio 将为 MVC 3 创建一个 Nuget Twilio.Mvc 包。我已经使用创建 Twilio/MVC 3/Azure 项目的步骤编辑了答案。
【解决方案2】:

我完成了您的复制步骤,除了我更改了一件事 - 在添加 twilio+deps 包并从 TwilioController 扩展控制器之前,我很早就为该角色启用了 WebDeploy。这样,VM 已经创建并且角色已经启动。

  1. 将新的 MVC3 角色发布到 Azure,启用 Web 部署 - 工作
  2. 添加 Twilio NuGet 包和 Web 部署 - 仍然有效
  3. 从 TwilioController 扩展和网络部署 -

我第一次做第3步,web deploy就报错了:

COM object has been separated from its underlying RCW cannot be used

我现在正在重试以确保最后一步可通过 WebDeploy 重现。已删除所有 Twilio 并再次发布以重置 webdeploy。将在大约 30 分钟后更新答案。

更新

好吧,这很奇怪。我能够重现上面的错误。但是,我关闭了 Visual Studio,重新启动,然后能够进行 Web 部署。 I now have a controller in an MVC3 web role on Azure that extends TwilioController

我建议您尝试上述步骤,甚至在不使用 WebDeploy 的情况下尝试您的复制。但是,在使用扩展 TwilioController 的控制器进行部署之前,请关闭并重新启动 Visual Studio。

如果还是不行,试试这个:

  1. 右键单击 Azure 项目并选择包。
  2. 转到门户,然后单击新建临时部署。
  3. 手动导航并上传 cscfg 和 cspkg 文件。

最终答案

我尝试了上述步骤。禁用 Web 部署时,包是从 Visual Studio 发布还是从门户手动发布似乎并不重要。两者都继续中止并重试。我可以让 TwilioController 部署的唯一方法是使用 WebDeploy,但这当然是不可接受的。

我建议您向 Microsoft 提出支持请求。不过,它似乎不是您提到的依赖项,因为我能够通过在 Web 部署上潜入 Twilio 东西来在实例上运行代码。它可能与上面提到的 COM 对象错误有关。

附: -- 你欠我 96 美分 8 小时的小型计算实例。

【讨论】:

  • 我已按照您的步骤操作并获得了相同的结果 - (事后可以通过网络部署添加 twilioControler)。这是进步-谢谢。我在失败场景中注意到的一件事是 Windows 系统日志中的多个 WAS 错误。我将在问题中发布错误。您现在可以删除您的网络角色了 :)
  • 上面使用的实例 URL 已被删除。祝你好运。
  • 感谢您的解决方法。如果我像您发现的那样使用 webdeploy 发布到 Azure,我可以事后 rdp 并在我将其交换到生产环境时关闭 Web 部署服务/端口,这意味着我现在有选择(谢谢,所以赏金是你的)。不过,在 MS 或 Twilio 解决潜在问题之前,我将把问题留待解决,如果没有其他人这样做,我会提供答案。
  • 您是否向 MS 提交了支持请求?如果你没有,你应该。关闭 Web 部署后,是否可以更改 VM 站点?我认为您可以更改实例数,但是为了更改虚拟机站点,必须进行网络部署是多么痛苦。
【解决方案3】:

尝试在 VS2010 Ulitimate 中使用 Intellitrace。这可以捕获此类依赖问题,允许您下载 Intellitrace 文件并找到适当的异常。

【讨论】:

    【解决方案4】:

    我知道这个问题是关于让 TwilioController 在 Azure 上工作,但如果您不知道该选项,我想建议您在 AppHarbor 上运行您的项目。我知道在 AppHarbor 上运行的许多应用程序都成功使用了 Twilio(例如,请参阅 this post)。

    (免责声明,我是 AppHarbor 的联合创始人)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      相关资源
      最近更新 更多