Windows Фабрика разработки Azure не будет работать как служба Windows "из коробки" .
Единственный способ сохранить переносимый сервис и работоспособным в Console, WinService или Azure Worker - это проектировать в такой абстракции с самого начала .
Если у вас есть правильные абстракции, ваше облачное приложение становится довольно гибким. Например, вы можете даже написать модульные тесты, подобные этим:
[Test]
public void Test()
{
Host.Initialize();
Host.Start();
var client = Host.Resolve<IMessageClient>();
client.Send(new Hello {Word = "World"});
client.Send(new Hello {Word = Rand.String.NextText(6000, 6000)});
client.Send(new Bye {Word = "Earth"});
SystemUtil.Sleep(50.Seconds());
Host.Stop();
}
или если используется .NET 4.0 TPL:
[Test]
public void Test()
{
using (var host = BuildHost())
{
host.Initialize();
var client = host.Resolve<IMessageClient>();
client.Send(new Hello { Word = "World" });
client.Send(new Hello { Word = Rand.String.NextText(6000, 6000) });
client.Send(new Bye { Word = "Earth" });
using (var cts = new CancellationTokenSource())
{
var task = host.Start(cts.Token);
SystemUtil.Sleep(10.Seconds());
cts.Cancel(true);
task.Wait(5.Seconds());
}
}
}
аналогичная проводка будет в консоли, WindowsService, Azure Host или моно-демоне в Linux.
И если вы также сохраняете хранилище должным образом, тогда вам больше не нужно будет использовать хранилище Azure (для разработки или производства) для тестов, эффективно используя локальное хранилище файлов или представления в памяти, где оно подходит. *
По сути, разработка облачной архитектуры, которая с самого начала была бы переносимой, упрощает многие вещи в будущем, сокращая затраты на разработку и обслуживание.
Примечание: тестовые фрагменты взяты из Lokad.CQRS для Windows Azure Руководство и структура