Проблемы с NauckIT.PostgreSQLProvider - PullRequest
       1

Проблемы с NauckIT.PostgreSQLProvider

2 голосов
/ 30 сентября 2011

У меня проблема с провайдером AspSQL для PostgreSQL (http://dev.nauck -it.de / projects / aspsqlprovider).

Когда я пытаюсь создать роли с помощью инструмента администрирования веб-сайта ASP.NET, появляется следующее сообщение:

Проблема с выбранным вами хранилищем данных. Это может быть вызвано неверным именем или учетными данными сервера или недостаточным разрешением. Это также может быть вызвано тем, что функция диспетчера ролей не включена. Нажмите кнопку ниже, чтобы перейти на страницу, где вы можете выбрать новое хранилище данных.

Следующее сообщение может помочь в диагностике проблемы: должен быть указан exePath, если он не запущен внутри автономного exe-файла. (D: \ Documents \ Programming \ Projects \ Portal \ web.config строка 40)

Вот раздел web.config:

<membership defaultProvider="PgMembershipProvider">
  <providers>
    <clear />
    <add name="PgMembershipProvider" type="NauckIT.PostgreSQLProvider.PgMembershipProvider" connectionStringName="db" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="bp" />
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="PgRoleProvider" cacheRolesInCookie="true" cookieName=".AspNetRoles" cookiePath="/" cookieProtection="All" cookieRequireSSL="false" cookieSlidingExpiration="true" createPersistentCookie="false" cookieTimeout="30" maxCachedResults="25">
  <providers>
    <clear />
    <add name="PgRoleProvider" type="NauckIT.PostgreSQLProvider.PgRoleProvider" connectionStringName="db" applicationName="bp" />
  </providers>
</roleManager>
<profile enabled="true" defaultProvider="PgProfileProvider">
  <providers>
    <clear />
    <add name="PgProfileProvider" type="NauckIT.PostgreSQLProvider.PgProfileProvider" connectionStringName="db" applicationName="bp" />
  </providers>
  <properties>
    <add name="FirstName" />
    <add name="LastName" />
  </properties>
</profile>
<sessionState mode="Custom" customProvider="PgSessionStateStoreProvider">
  <providers>
    <clear />
    <add name="PgSessionStateStoreProvider" type="NauckIT.PostgreSQLProvider.PgSessionStateStoreProvider" enableExpiredSessionAutoDeletion="true" expiredSessionAutoDeletionInterval="60000" enableSessionExpireCallback="false" connectionStringName="db" applicationName="bp" />
  </providers>
</sessionState>

Я следовал инструкции Шаг за Шагом

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 25 апреля 2012

Похоже, HttpContext.Current может быть нулевым. Класс PgMembershipProvider проверяет это, чтобы увидеть, размещен он или нет. Основываясь на ответе, он пытается либо OpenExeConfiguration (для автономного), либо OpenWebConfiguration для веб-приложений.

Поскольку HttpContext.Current иногда может быть нулевым в Asp.Net 4.0, принимается неправильное решение и OpenExeConfiguration вызывается из веб-приложения (большое нет-нет). Исправление должно изменить PgMembershipProvider.Init, чтобы использовать следующую проверку:

Configuration cfg = HostingEnvironment.IsHosted ? 
    WebConfigurationManager.OpenWebConfiguration(HostingEnvironment.ApplicationVirtualPath) :
    ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

вместо HttpContext.Current != null чека.

0 голосов
/ 29 апреля 2013

эта ошибка была исправлена ​​в версии 2.0.0 провайдера.

См. http://dev.nauck -it.de / проблемы / 131

Вы можете скачать последнюю версию через NuGet: https://nuget.org/packages/NauckIT.PostgreSQLProvider/

...