В процессе создания сайта столкнулся с такой проблемой: контрол CreateUserWizard не работает корректно с удаленным SQL Server, и веб-страница, при попытке создания пользователя через этот элемент, вываливается в ошибку “нэ вижу экземпляр сервера, дарагой!”. Как пишут “источники”, при локально установленном SQL такой проблемы нет.

Решение есть в MSDN, и оно относительно простое. Сейчас я опишу способ для “Expression Web”.

1. Создаем базу данных для ASP.NET “Aspnetdb”.

Запускаем утилиту %windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe . Она имеет простой графический интерфейс. Выбираем пункт “Настроить сервер SQL для служб приложений”, нажимаем “Далее”, указываем свой экземпляр сервера (в моем случае tcp:192.168.0.1,12121) и авторизацию. Базу данных оставляем <по умолчанию>. Жмем “Далее” и заканчиваем процесс создания БД.

2. Создаем новое имя входа в SQL Server “NT AUTHORITY\Network Service” (без кавычек) и запускаем SQL скрипт:

   1: -- Create a SQL Server login for the Network Service account
   2: sp_grantlogin 'NT AUTHORITY\Network Service'
   3:  
   4: -- Grant the login access to the membership database
   5: USE aspnetdb
   6: GO
   7: sp_grantdbaccess 'NT AUTHORITY\Network Service', 'Network Service'
   8:  
   9: -- Add user to database role
  10: USE aspnetdb
  11: GO
  12: sp_addrolemember 'aspnet_Membership_FullAccess', 'Network Service'
Это даст необходимые права нашему новому имени входа.
 
3. Конфигурируем файл “Web.config”
 
Добавляем новую строку соединения с SQL.
 
   1: <connectionStrings>
   2:   <add name="ConnectionString2" connectionString="Data Source=tcp:192.168.0.1,12121;Initial Catalog=aspnetdb;Integrated Security=SSPI"
   3:   providerName="System.Data.SqlClient" />
   4: </connectionStrings>

В ветку <system.web> добавляем новую ветку <membership> следующего вида:

   1: <system.web>
   2:   <membership defaultProvider="MySqlMembershipProvider" >
   3:     <providers>
   4:       <clear/>
   5:       <add name="MySqlMembershipProvider"
   6:            connectionStringName="ConnectionString2"
   7:            applicationName="MyAppName"
   8:            type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
   9:     </providers>
  10:   </membership>
  11: </system.web>

Убедитесь, что значение атрибута connectionStringName совпадает с именем созданной строки соединения.
Осталось добавить имя нашего provider в поле Data->MembershipProvider контрола CreateUserWizard, и если нигде не ошиблись - все должно работать.

P.S. заодно потестил “Code Snippet” для WLW =)))

Technorati Теги: C#. ASP.NET,Expression Web



URL записи