Azure开发存储服务作为Windows服务运行

时间:2010-08-20 19:44:07

标签: .net windows-services azure azure-storage

我正在开发一个项目,它是一个非常大的中央媒体存储库,它使用Azure存储来容纳我们将由第三方应用程序承担的所有外部二进制文件。我们的应用程序使用azure,但现在正在向前添加一系列新功能,并且“从本地框开发和测试”形式的测试已经不够了。由于我们有一系列外部资源为我们提供需要在云中工作的媒体,因此我们需要集成测试环境设置。所以我已经设置了环境,我的问题是,有没有办法让Azure开发存储启动并作为Windows服务运行?目前,我必须登录,并手动启动azure developmet存储,但一旦我注销,它就会关闭。这不是理想的,也不行。由于这是一个开发盒,并且大多数数据都是垃圾,我们不想浪费我们的空间和带宽将这些东西发送到我们的帐户,这花费了我们的钱。谢谢!

2 个答案:

答案 0 :(得分:0)

Windows Azure Development Fabric不会作为Windows Service开箱即用运行。

保持实际服务可移植且能够在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());
        }   
    }
}

类似的连接将在Linux上的控制台,WindowsService,Azure主机或单一守护程序中。

如果你保持存储器的正确抽象,那么就不需要实际使用Azure存储(开发或生产)进行测试,有效地使用本地文件存储或适合的内存表示。

基本上,将云架构设计为从一开始就可移植,简化了很多工作,降低了开发和维护成本。

注意:测试片段取自Lokad.CQRS for Windows Azure指导和框架

答案 1 :(得分:0)

应该可以在具有足够权限的用户帐户下将主机作为计划任务运行。