используя провайдера членства asp.net в dll - PullRequest
1 голос
/ 29 декабря 2010

За последние несколько лет я использовал провайдеров членства в веб-приложениях.Теперь у меня есть новый «запрос» на внутренний проект на работе.Они хотели бы, чтобы служба (не веб-служба) быстро выполняла аутентификацию.По сути, показ метода ValidateUser (UserName, Password) ...

Я строю это в DLL, которая будет размещена на нашем внутреннем веб-сайте.Каков наилучший подход, чтобы сделать эту работу?DLL будет не ссылаться на веб-приложение, а веб-приложение будет ссылаться на DLL.Как я могу сообщить DLL о поставщике членства?

TIA

PS: Если на этот вопрос уже был дан ответ, пожалуйста, направьте меня к этому ...

РЕДАКТИРОВАТЬ:нашел статью об использовании членства ASP.NET с приложениями WinForms и / или WPF.К сожалению, они зависят от файла app.config.Похоже, что DLL не использует app.config после публикации.Если я ошибаюсь, пожалуйста, поправьте меня!Статья здесь: http://aspalliance.com/1595_Client_Application_Services__Part_1.all

Ответы [ 2 ]

2 голосов
/ 30 декабря 2010

Что ж, похоже, что единственный способ установить строку подключения SqlMembershipProvider - это использовать Initialize метод , который, согласно документации, не должен вызываться из нашего кода.

Инициализирует поставщика членства в SQL Server значениями свойств, указанными в файле конфигурации приложения ASP.NET.Этот метод не предназначен для использования непосредственно из вашего кода.

Поэтому в основном нам нужно найти способ получить эту информацию в конфигурационном файле, связанном с приложением, в котором размещена DLL.

Все, что вам нужно сделать, это ссылаться на system.web.dll и system.configuration.dll в вашей сборке, использовать SqlMembershipProvider, а затем установить правильные значения в app.config для исполняемого файла следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="MembershipConnectionString" connectionString="connectionstringdetails" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <membership defaultProvider="DefaultSqlMembershipProvider">
      <providers>
        <clear />
        <add name="DefaultSqlMembershipProvider" connectionStringName="MembershipConnectionString" type="System.Web.Security.SqlMembershipProvider" />
      </providers>
    </membership>
  </system.web>
</configuration>

Важно отметить, что если вы «MyAssembly.dll» и «TheApp.exe», это должно быть «TheApp.exe.config», а не «MyAssembly.dll.config».Файл конфигурации всегда связан с исполняемой сборкой.

0 голосов
/ 29 декабря 2010

На веб-сайте, когда приложение запускается (Application_Start в global.asax), вы можете передать ссылку поставщика членства, о котором знает веб-сайт, в DLL, которую вы написали.DLL будет просто ожидать типа System.Web.Security.MembershipProvider.Таким образом, dll все еще может вызывать необходимый метод из реализации, но не знать тип времени выполнения провайдера во время компиляции (это то, что известно как внедрение зависимости).

...