Переименование веб-роли в проекте VS 2010 Cloud Service - PullRequest
0 голосов
/ 23 октября 2010

Я только начал использовать VS 2010 для создания облачной службы (HealthTracker) и подключил к ней веб-проект MVC2. Когда я нажал «Отладка», была запущена структура разработки, и я смог, как и ожидалось, перемещаться по своему веб-приложению на своем компьютере.

Я решил, что MVCWebRole2 - это плохое имя для моего веб-приложения, поэтому я переименовал его в HealthTrackerMVC. Я использовал Refactor -> Rename, чтобы изменить MVCWebRole2 на HealthTrackerMVC. Я построил чисто, и теперь, когда я нажимаю «Отладка», запускается ткань разработки, и веб-приложение никогда не запускается, и в итоге оно выходит из режима отладки, и я ничего не делаю.

Как мне это исправить? Я бы предпочел не начинать все сначала ...

UPDATE

Я проверил ServiceConfiguration.cscfg, ServiceDefinition.csdef и файл решения. Все имена совпадают, и все GUID совпадают. Я даже переименовал папку, в которой находился HealthTrackerMVC (ранее назывался MVCWebRole2), и отредактировал файл решения, чтобы указать на новый проект. Все загружается и строит правильно. Development Fabric показывает запуск HealthTrackerMVC, говорит, что он занят, а затем довольно быстро завершает работу. Смотрите прикрепленный скриншот:
alt text

Итак, я знаю, что моя веб-роль запускается ... почему она так быстро закрывается?

Ответы [ 3 ]

2 голосов
/ 23 октября 2010

Проверьте файлы конфигурации 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">

...

Если это не сработает , щелкните правой кнопкой мыши по «Роли» в проекте облачной службы в обозревателе решений. В меню ДОБАВИТЬ должна быть опция «Проект веб-роли в решении». Выберите это и свяжите свою новую роль. Удалите старую роль также в этом пункте


Если это все еще не работает , перейдите в файловую систему, в которой хранится проект, и откройте файл .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 (name и .csproj ref), и все будет хорошо. Скорее всего, GUID проекта не изменился, но если каким-то образом это произошло, просто откройте файл SLN, чтобы получить это число.

После того, как вы перейдете на эту VS, вам будет предложено перезагрузить Solution / Projects. Если нет, вам следует перезагрузить в любом случае.

1 голос
/ 23 октября 2010

Я рекомендую проверить Web.config и фактическую логику запуска (т. Е. Известно, что фабрика Azure тихо убивает веб-проекты с недопустимой веб-конфигурацией без возникновения каких-либо ошибок; это то, что просто сделало мою жизньвозбуждает несколько раз).

Просто некоторые идеи .Например, вы можете попробовать запустить один только веб-проект (как обычный проект).Если это работает - удалите существующую веб-роль и добавьте новую в решение (ссылаясь на этот веб-проект) и попробуйте запустить ее в структуре разработки.Если это не так, но веб-проект выполняется один - экспортируйте его в новое решение и добавьте туда новую веб-роль.

0 голосов
/ 26 октября 2010

Это немного далеко, но если вы перезаписали RoleEntryPoint и перезаписали метод Run, он должен содержать что-то вроде

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

Если этот метод когда-нибудь вернется, ваше приложение остановится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...