ServiceStack + Azure 云服务(CloudConfigurationManager)

ServiceStack + Azure Cloud Service (CloudConfigurationManager)

我们最近将我们的 ServiceStack 应用程序转换为 Azure 云服务。

我们发现,在内部,ServiceStack 并不知道它需要使用 CloudServiceConfiguration 管理器而不是 ConfigurationManager 加载配置设置(如 oauth.RedirectUrl)。

有没有办法连接适合新环境的ServiceStack?

谢谢!

Azure CloudServiceConfiguration 没有 AppSettings provider,通过继承 AppSettingsBase 并覆盖 GetNullableString() 应该很容易创建一个,否则最简单的方法是填充 Dictionary<string,string> 使用 Azure 的配置并将它们加载到 DictionarySettings,例如:

AppSettings = new DictionarySettings(azureSettings);

如果你想同时使用 Web.config <appSettings/> 和 Azure 设置,你应该使用 MultiAppSettings 在 AppHost 构造函数中使用 AppSettings 的级联源,例如:

AppSettings = new MultiAppSettings(
    new DictionarySettings(azureSettings),
    new AppSettings());

您不需要使用 'MultiAppSettings',因为 CloudConfigurationManager 会回退到您的配置 appsettings 部分。 (appsettings only)

根据我的测试,您似乎根本不需要 asp.net website 中的任何内容,因为 web.config 设置似乎以某种方式被覆盖天蓝色的设置。然而,在 webjob 中,您将需要使用 CloudConfigurationManager ...下面是用于包装它的 servicestack AppSettings 提供程序的合适实现。

public class AzureCloudSettings : AppSettingsBase
{
    private class CloudConfigurationManagerWrapper : ISettings
    {
        public string Get(string key)
        {
            return CloudConfigurationManager.GetSetting(key, false);
        }

        public List<string> GetAllKeys()
        {
            throw new NotImplementedException("Not possible with CloudConfigurationManager");
        }
    }

    public AzureCloudSettings() : base(new CloudConfigurationManagerWrapper()) { }

    public override string GetString(string name)
    {
        return GetNullableString(name);
    }

    public override string GetNullableString(string name)
    {
        return base.Get(name);
    }
}