У меня есть веб-приложение, и я пытаюсь установить строку соединения, используемую поставщиками членства и роли динамически. Я искал и наткнулся на несколько сообщений, которые предлагали то же самое: создать общую строку соединения и использовать ее поставщики членства и роли; установите строку соединения в global.asax. Что-то вроде этого:Динамическая установка строки подключения
Web.config:
<connectionStrings>
<add name="x" connectionString="content placeholder" />
</connectionStrings>
<roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">
<providers>
<remove name="AspNetSqlRoleProvider"/>
<add name="AspNetSqlRoleProvider"
connectionStringName="x" applicationName="/"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
<membership defaultProvider="MyMembershipProvider">
<providers>
<clear />
<add name="MyMembershipProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="x"
applicationName="MyApp"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false"
minRequiredNonalphanumericCharacters="0"
passwordFormat="Hashed" />
</providers>
</membership>
Global.aspx:
private void SetProviderConnectionString(string connectionString)
{
// Set private property of Membership, Role and Profile providers.
var connectionStringField = Membership.Provider.GetType().GetField("_sqlConnectionString", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (connectionStringField != null)
connectionStringField.SetValue(Membership.Provider, connectionString);
var roleField = Roles.Provider.GetType().GetField("_sqlConnectionString", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (roleField != null)
roleField.SetValue(Roles.Provider, connectionString);
var profileField = ProfileManager.Provider.GetType().GetField("_sqlConnectionString", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (profileField != null)
profileField.SetValue(ProfileManager.Provider, connectionString);
}
protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
SetProviderConnectionString(Common.msSqlConn);
}
То, что я застрял в это параметр "_sqlCOnnectionString". Я использую базу данных Oracle 11g. Я попытался добавить следующее, чтобы увидеть, если я могу получить список FieldInfo но он возвращает пустой массив:
System.Reflection.FieldInfo[] fi = Membership.Provider.GetType().GetFields();
Может кто-нибудь сказать мне, где «_sqlConnectionString» должна исходить от или как я могу изменить это значение для использования с Поставщики членства/роли Oracle?
Моих провайдеров членства/роли имеет типов:
type = "Oracle.Web.Security.OracleMembershipProvider, Oracle.Web, Version=2.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342"
type="Oracle.Web.Security.OracleRoleProvider, Oracle.Web, Version=2.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342".