我刚刚开始使用VS 2010来创建Cloud Service(HealthTracker),并且我附加了一个MVC2 Web项目。当我点击Debug时,启动了开发结构,我能够按照预期在我的机器上浏览我的Web应用程序。
我认为MVCWebRole2对我的网络应用程序来说是一个坏名字,所以我将其重命名为HealthTrackerMVC。我使用了Refactor - >重命名以将MVCWebRole2更改为HealthTrackerMVC。我建立了干净,现在当我点击调试时,开发结构开始了,网络应用程序永远不会启动,最终它退出调试模式而没有我做任何事情。
我该如何解决这个问题?我宁愿不从一切开始......
更新
我检查了ServiceConfiguration.cscfg,ServiceDefinition.csdef和解决方案文件。所有名称都匹配,并且所有GUID都匹配。我甚至重命名了包含HealthTrackerMVC(以前称为MVCWebRole2)的文件夹,并编辑了解决方案文件以指向新项目。一切都正确加载和构建。开发结构显示HealthTrackerMVC开始,说它很忙,然后很快关闭它。请参见随附的屏幕截图:
所以我知道我的网络角色正在启动...为什么它会这么快关闭?
答案 0 :(得分:2)
检查Azure配置文件,因为它们都引用了角色名称,我不相信VS的重构命令命中。如果您的项目正在构建且角色根本没有启动,则最有可能的原因是角色不知道该从哪里开始。
在 ServiceDefinition.csdef
中<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="YourAzureService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="HealthTrackerMVC" vmsize="Small" enableNativeCodeExecution="true">
...
在 ServiceConfiguration.cscfg
中<?xml version="1.0"?>
<ServiceConfiguration serviceName="YourAzureService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
<Role name="HealthTrackerMVC">
...
如果不起作用,请右键点击解决方案资源管理器中Cloud Service项目下的“角色”。 ADD菜单应该有“解决方案中的Web角色项目”选项。选择它并链接新角色。此时也删除旧角色
如果仍然无效,请转到存储项目的文件系统,然后在文本编辑器中打开.ccproj文件(Cloud Service Project)。
查找对上一个角色的引用(ccproj是MSBUILD格式)。它将类似于:
<ItemGroup>
<ProjectReference Include="Folder\MVCWebRole2.csproj">
<Name>YourAzureService</Name>
<Project>{26f72b59-1423-4175-b401-9c8f5f45db2a}</Project>
<Private>True</Private>
<RoleType>Web</RoleType>
<RoleName>MVCWebRole2</RoleName>
</ProjectReference>
</ItemGroup>
更改对新HealthTrackerMVC项目(名称和.csproj ref)的引用,你应该好好去。 项目GUID很可能没有改变,但如果它以某种方式完成,只需打开SLN文件即可获得该数字。
更改此VS后,应提示重新加载解决方案/项目。如果没有,你应该重新加载。
答案 1 :(得分:1)
我建议检查Web.config和实际启动逻辑(即已知Azure结构以无效的Web配置静默杀死Web项目而不会引发任何错误;这就是我的生活激动几次)。
只是一些想法。例如,您可以尝试单独启动Web项目(就像通常的项目一样)。如果可行 - 删除现有Web角色并向解决方案添加新角色(引用此Web项目)并尝试在开发结构中运行它。如果没有,但Web项目单独运行 - 将其导出为新的解决方案并在那里添加新的Web角色。
答案 2 :(得分:0)
这是一个很长的镜头,但是如果你覆盖了RoleEntryPoint并覆盖了Run方法,它应该包含类似
的内容public override void Run()
{
while (true)
{
Thread.Sleep(8000);
}
}
如果此方法返回,您的应用程序将停止。