Технически вы не можете играть роль обоих типов. Тем не менее, веб-роль такая же, как и роль рабочего, она просто настроена на IIS. Таким образом, вы можете объединить их в одну веб-роль - IIS будет запускаться в отдельном процессе, а точка ввода роли Run()
будет запускать бесконечный цикл для обработки «бэкэнд». См. this similar question.
Это сделает масштабирование более сложным. Вся идея отдельных ролей (помните, что у вас может быть не только одна веб-роль и одна рабочая роль, вы можете иметь, например, четыре рабочие роли и две веб-роли, если это подходит для вашего решения) заключается в том, что вы можете масштабировать их отдельно.
Похоже, что когда вы объедините две роли в одну, вы больше не сможете их масштабировать. В большинстве случаев это не так - вам просто нужно изменить показатели.
Например, вы хотели запустить один экземпляр веб-роли для каждой тысячи HTTP-запросов в минуту и один экземпляр рабочей роли для каждых десяти запросов в промежуточной очереди. Хорошо, это означает, что каждая тысяча HTTP-запросов нуждается в том же объеме обработки, что и десять элементов в промежуточной очереди. Таким образом, вы создаете новую метрику, которая принимает оба параметра и выводит несколько экземпляров. Например, у вас есть пять тысяч запросов в минуту и двадцать запросов в очереди бэкэнда - вам нужно семь экземпляров объединенной роли.
Это не будет работать для всех приложений, но большинство из них будет использовать этот подход просто отлично. Бонус заключается в том, что вы избегаете случаев, когда любая из ролей на холостом ходу, потому что текущая загрузка попадает на другую роль.
Вот аналогичный вопрос http://stackoverflow.com/q/6266560/57428 – sharptooth