2012-04-20 111 views
3

编辑:我想通了。差不多:)我解决了这个问题,但我找到了另一个。在这里记录解决方案。Azure Web角色卡住初始化


我有一个MVC的web角色,我想部署到Azure。它始终从开始>初始化。我已经完成了我的研究,并找到了两个主要原因。

  1. 一个我使用没有Copy Local = True的组件设置
  2. 诊断连接字符串是错误的。

我有三重检查了我的诊断连接,它很好。我可以在工作者角色中使用完全相同的连接字符串,并且它启动得很好所以我假设问题与上面的#1有关。

这是一个标准的MVC项目,我添加了一个天蓝色的部署项目,所以我的猜测是我错过了一个“Azure web角色项目”会自动为我做的事情。我已经从项目上下文菜单中选择了“添加可部署的组件”选项,所以应该设置MVC位,对吗?

这是我的参考文献清单,高亮显示的项目有Copy Local = true。我错过了吗?我还需要做些什么才能部署?有什么诊断工具可以帮我弄清楚吗?

更新:
当我找到更多的信息:)

所以,我终于能够赶上它的状态时,我可以远程连接到服务器我的爱。我打开IIS,看到一切都应该在那里。我试图在本地点击该网站,但我得到这个错误。程序集IS包含在我的部署中,因此找不到它是没有意义的。它似乎正试图加载与打包的版本不同的版本。

无法加载文件或程序集“System.Web.WebPages”或其某个 依赖项。找到的程序集的清单定义不符合程序集引用的 。 (异常来自HRESULT:0x80131040)

因此,有(至少一个)我的错误.....但为什么?该网站运行良好的IIS快递,它在开发结构中运行良好。我在这里感觉像一个小菜鸟。我做错了什么?

enter image description here

回答

2

我有一个参考V2的System.WebPages,但bin_dependencies有V1在那里。我不知道这是怎么发生的,但确保一切都在正确的版本上工作。

0

你缺少,因为它们驻留在全局程序集缓存未包装的,因此被假定为提供了一些直接或间接引用的程序集。 看看this answer and comments应该记录相同的问题。

+0

我在我的问题中陈述了这一点。我知道这可能是一个原因,但看看我发布的更新 – Joe 2012-04-20 05:55:45

+0

你是否也看过间接依赖关系?您应该使用.NET Reflector并查看System.Web.WebPages的引用并将它们添加到您的主项目中,并将CopyLocal = True。 – 2012-04-20 06:33:16

0

当您使用ASP.NET MVC(3)时,您必须将其安装在Azure上。部署最简单的方法是使用实​​用的功能“添加可部署的依赖关系”:

add deployable depencies

你会发现这个选项,当你右键单击Web应用程序项目(Web角色本身,而不是云计算项目)。然后,只需选择ASP.NET MVC:

enter image description here

这个过程会在你的web应用程序创建一个文件夹_bin_deployableAssemblies。该框架将知道如何处理它。

注意

“添加部署相关性” 是Visual Studio 2010 SP1一部分。因此,如果您尚未升级到SP1,我强烈建议您这样做;)

+0

我的问题状态我已经做到了:) – Joe 2012-04-20 05:47:20

+1

好吧,如果你有VS Ultimate,我建议你在部署上打开Intellitrace。这样你会发现失败的确切原因。 Intellitrace为我节省了很多类似错误的调试时间。如果您还没有机会了解Intellitrace是什么,现在是适当的时机。 http://msdn.microsoft.com/en-us/library/windowsazure/ff683671.aspx – astaykov 2012-04-20 05:57:02

+0

甜,我必须尝试。谢谢 – Joe 2012-04-20 05:59:01

0

不确定这是否是您遇到的问题,但是......如果启用会话状态,则默认提供程序在web.config中是SQL Express(基于2011年8月更新,角色模板现在使用所有通用提供程序)。由于SQL Express未安装在Windows Azure上,因此会导致Web角色启动问题。您需要将提供者更改为SQL Azure或Cache。关于Universal Provider更新的Nate Totten的blog post在这方面更加清晰。

我回答了类似的问题here以及...

+0

是的,我已经设置了会话状态来使用缓存。感谢您的提示,尽管 – Joe 2012-04-20 06:23:29

1

我想知道你正在使用的MVC版本。如果您使用MVC 3或4,请将CLR运行时重定向到组件的新版本。例如,对于MVC 3:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

如果您创建新的MVC Web角色,将自动进行配置。如果您将现有的MVC应用程序迁移到Windows Azure,则需要手动配置它。

最好的问候,

Ming Xu。

+0

这是一个MVC 3项目,这已经到位。 – Joe 2012-04-20 13:34:05