.Net RoleProvider без connectionString

Я хотел бы использовать .Net SqlMembershipProvider и SqlRoleProvider для управления пользователями в моем приложении. Моя проблема в том, что когда приложение запускается, оно не знает никакой информации о подключении к базе данных. В целях безопасности ему необходимо получить эту информацию от службы WCF, работающей на сервере базы данных. Поэтому мне нужно создавать поставщиков членства / ролей постфактум.

Думаю, мне удалось разработать и добавить поставщика членства:

// register membership provider
var membership = new SqlMembershipProvider();
var providerValues = new NameValueCollection();
providerValues.Add("name", "sqlMembershipProvider");
providerValues.Add("applicationName", "/");
providerValues.Add("connectionStringName", "connectionStrDynamAddedToConfig");
providerValues.Add("maxInvalidPasswordAttempts", "10");
membership.Initialize("sqlMembershipProvider", providerValues);

Мне пока не удалось придумать что-то подобное для создания RoleProvider. Я могу создать поставщика, но не могу добавить его в диспетчер ролей. Нужно ли мне создавать настраиваемого поставщика, который может принимать connectionString после того, как он уже инициализирован?


person Ben Rice    schedule 22.01.2010    source источник


Ответы (1)


Я наткнулся на эту страницу, на которой рекомендуется "загрузить ProviderToolkitSamples и изменив класс SQLConnectionHelper. В частности, функцию GetConnectionString, которая выглядит примерно так:

internal static string GetConnectionString(string specifiedConnectionString, bool lookupConnectionString, bool appLevel)
{
        if (specifiedConnectionString == null || specifiedConnectionString.Length < 1)
            return null;

        string connectionString = null;

        /////////////////////////////////////////
        // Step 1: Check <connectionStrings> config section for this connection string
        if (lookupConnectionString)
        {
            ConnectionStringSettings connObj = ConfigurationManager.ConnectionStrings[specifiedConnectionString];
            if (connObj != null)
                connectionString = connObj.ConnectionString;

            if (connectionString == null)
                return null;
        }
        else
        {
            connectionString = specifiedConnectionString;
        }

        return connectionString;
    }
}

Текст взят с сайта williablog.net, поскольку, как сказано на этой странице, "ссылки со временем ломаются"

person Greg    schedule 22.01.2010