代码之家  ›  专栏  ›  技术社区  ›  Nathan DeWitt

在VS2010云服务项目中重命名Web角色

  •  0
  • Nathan DeWitt  · 技术社区  · 14 年前

    我刚刚开始使用VS 2010创建一个云服务(healthctracker),并在其中附加了一个MVC2 web项目。当我点击Debug时,dev结构就启动了,并且我能够像预期的那样在我的机器上导航我的web应用。

    我认为MVCWebRole2对我的web应用程序来说是个坏名字,所以我将它重命名为HealthTrackerMVC。我使用Refactor-->Rename将MVCWebRole2更改为HealthTrackerMVC。我创建干净,现在当我点击调试时,DEV结构开始,Web应用程序从不启动,最终退出调试模式,而我不做任何事情。

    我该怎么解决?我不想从头开始。。。

    更新

    我已经检查了ServiceConfiguration.cscfg、ServiceDefinition.csdef和解决方案文件。所有的名字都匹配,所有的guid都匹配。我甚至重新命名了HealthTrackerMVC(以前叫MVCWebRole2)所在的文件夹,并编辑了解决方案文件以指向新项目。所有的加载和构建都是正确的。开发结构显示HealthTrackerMVC正在启动,说它很忙,然后很快关闭它。请参阅随附的屏幕截图:
    alt text

    所以我知道我的网络角色开始了。。。为什么这么快就关机了?

    3 回复  |  直到 11 年前
        1
  •  2
  •   Taylor Bird    14 年前

    检查Azure配置文件,因为它们都引用了角色名,而且我不相信VS的重构命令命中。如果您的项目正在构建,而角色根本没有启动,则很可能是因为角色不知道要启动什么。

    服务定义.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">
    
    ...
    

    服务配置.cscfg

    <?xml version="1.0"?>
    <ServiceConfiguration serviceName="YourAzureService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
        <Role name="HealthTrackerMVC">
    
    ...
    

    如果那不起作用 ,右键单击解决方案资源管理器中云服务项目下的“角色”。“添加”菜单应该有一个“解决方案中的Web角色项目”选项。选择该选项并链接新角色。此时也删除旧角色


    如果还是不行的话 ,转到存储项目的文件系统,并在文本编辑器中打开.ccproj文件(云服务项目)。

    查找对上一个角色的引用(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项目的引用(name和.csproj ref),您应该可以继续。 很可能项目的GUID没有改变,但是如果它改变了,只要打开SLN文件就可以得到这个数字。

    一旦对此进行了更改,VS将提示重新加载解决方案/项目。如果没有,你无论如何都应该重新加载。

        2
  •  1
  •   Rinat Abdullin    14 年前

    我建议 检查Web.config和实际的启动逻辑 (也就是说,众所周知Azure fabric会在不引发任何错误的情况下,悄悄地杀死web配置无效的web项目;这让我的生活兴奋了好几次)。

    只是一些想法 . 例如,您可以尝试单独启动web项目(就像通常的项目一样)。如果它工作-删除现有的Web角色,并添加一个新的解决方案(引用这个Web项目),并尝试在DEV结构中运行它。如果没有,但web项目是单独运行的-将其导出到一个新的解决方案,并在那里添加一个新的web角色。

        3
  •  0
  •   knightpfhor    14 年前

    这有点难,但是如果覆盖了RoleEntryPoint并覆盖了Run方法,它应该包含如下内容

    public override void Run()
    {
        while (true)
        {
            Thread.Sleep(8000);
        }
    }
    

    如果此方法返回,则应用程序将停止。