В процессе создания сайта столкнулся с такой проблемой: контрол 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:
2: 3: providerName="System.Data.SqlClient" />
4: connectionStrings>
В ветку добавляем новую ветку следующего вида:
1:
2:
3:
4:
5: 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