PeppeDotNet.it

Il blog di Giuseppe Marchi - SharePoint MVP

NAVIGATION - SEARCH

Configurare i provider di Memebrship e Role su Aruba

Configurare i provider di Memebrship e Role su Aruba
Data: 20/02/2011
Categoria: ASP.NET 2.0
Codice d'esempio


Qui in Italia il provider Aruba è sicuramente uno dei più famosi, contando i prezzi in relazione alla tipologia di servizio offerto. Cercando non di non far alcun tipo di pubblicità in senso positivo o negativo, può capitarci di imbatterci nell’utilizzo dei provider di Membership e Role nati con ASP.NET 2.0 utilizzando il servizio MS SQL Server di Aruba.
Se ci avete mai provato, avrete sicuramente cercato di rispecchiare la medesima struttura di tabelle e stored procedure che avete in locale, sul database SQL Server di Aruba e vi sarete sicuramente imbattuti nell’errore:

Could not find stored procedure ‘dbo.aspnet_CheckSchemaVersion’.

Questo errore è causato dal fatto che SQL Server offerto da Aruba non ci mette a disposizione lo schema "dbo" che è invece utilizzato dal .NET Framework nelle classi dei provider sopra indicati, a favore dell'utilizzo di uno schema che ha lo stesso nome che è stato assegnato al nostro database.
Per ovviare a questo problema possiamo seguire questi passi:

1- Scaricare i sorgenti dei provider in questione disponibili allinterno del sito Microsoft:

2- Eseguire e quindi installare il file "ProviderToolkitSamples.msi"

3- Aprire la soluzione andando in C:\Programmi\ASP.NET Provider Toolkit SQL Samples\ .

4- Sostituire in tutta la soluzione la parola "dbo" con il nome del proprio database MS Sql Server di Aruba (Nel nostro esempio "MSSql12345")



5- Ricompilare la soluzione e copiare l’assembly "ProviderToolkitSampleProviders.dll" nella cartella bin del sito web che abbiamo intenzione di installare all’interno dei server Aruba.

6- All'interno del file Web.config dovrete poi modificare i riferimenti ai provider di default (nel nostro caso per quanto riguarda Membership e Role, ma se utilizzate anche altri provider dovete fare questa operazione in tutte le loro rispettive sezioni di configurazione). La cosa su cui dovete porre un pò di attenzione è che, a meno che non vogliate cambiare lo schema al vostro database in locale, siete costretti a modificare alternativamente il provider locale o quello di Aruba a seconda che vogliate far girare l'applicazione sul database locale o su quello di Aruba (altrimenti, potete utilizzare le nuove funzionalità di ASP.NET 4.0 e inserire la configurazione per il server di Aruba sul web.config di produzione e mantenere quella relativa al vostro SQL Server locale nel web.config legato al modello di compilazione in "debug" del nostro sito web).
Nel nostro caso utilizzeremo il provider locale fino al punto 14, quindi commentate quello di Aruba):

<membership defaultProvider="AspNetSqlMembershipProvider">
<providers>
<clear/>
<!--Provider locale-->
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="conn"
minRequiredPasswordLength="5"
minRequiredNonalphanumericCharacters="0"
requiresQuestionAndAnswer="false"
applicationName="Example"
/>

<!--Provider aruba-->
<add name="AspNetSqlMembershipProvider"
type="Microsoft.Samples.SqlMembershipProvider, ProviderToolkitSampleProviders"
connectionStringName="conn"
minRequiredPasswordLength="5"
minRequiredNonalphanumericCharacters="0"
requiresQuestionAndAnswer="false"
applicationName="Example"
/>

</providers>
</membership>

<roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">
<providers>
<clear/>
<!--Provider locale-->
<add name="AspNetSqlRoleProvider"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="conn"
applicationName="Example"
/>

<!--Provider aruba-->
<add name="AspNetSqlRoleProvider"
type="Microsoft.Samples.SqlRoleProvider, ProviderToolkitSampleProviders"
connectionStringName="conn" applicationName="Example"
/>
</providers>
</roleManager>


7- Fatto questo, potete creare nel vostro SQL Server locale un database e chiamatelo per comodità con lo stesso nome del database Aruba: nel nostro caso MSSql12345.

8- Utilizzate il comando "aspnet_regsql.exe" per generare in automatico le tabelle, viste e stored procedures necessarie per il SqlRoleProvider e per il SqlMembershipProvider. Comparirà un wizard che vi chiederà in quale database creare le tabelle. Scegliete quindi MSSql12345.

9- Abbiamo quindi generato tutto ciò che ci serviva. Ora andiamo nel Web.config della nostra applicazione ed inseriamo la stringa di connessione al nostro database locale:

<connectionStrings>
<add name="conn"
connectionString="Data Source=MyPC;Initial Catalog=MSSql12345;Integrated Security=True"
providerName="System.Data.SqlClient"
/>
</connectionStrings>

10 - Possiamo ora utilizzare l’ASP.NET Configuration di Visual Studio per crearci in modo comodo i ruoli ed i primi utenti:



11- Si aprirà quindi la pagina di amministrazione:



Facciamo quindi click sul tab "Sicurezza" ed inseriamo utenti e ruoli in base alle nostre esigenze.

12- Ora non ci resta che esportare le tabelle, le viste e le stored procedure create nel database locale e portarle nel database su Aruba. Questi gli oggetti che dobbiamo assicurarci di portare.

TABELLE
dbo.aspnet_Applications
dbo.aspnet_Membership
dbo.aspnet_Paths
dbo.aspnet_PersonalizationAllUsers
dbo.aspnet_PersonalizationPerUser
dbo.aspnet_Profile
dbo.aspnet_Roles
dbo.aspnet_SchemaVersions
dbo.aspnet_Users
dbo.aspnet_UsersInRoles
dbo.aspnet_WebEvent_Events

VISTE
dbo.vw_aspnet_Applications
dbo.vw_aspnet_MembershipUsers
dbo.vw_aspnet_Profiles
dbo.vw_aspnet_Roles
dbo.vw_aspnet_Users
dbo.vw_aspnet_UsersInRoles
dbo.vw_aspnet_WebPartState_Paths
dbo.vw_aspnet_WebPartState_Shared
dbo.vw_aspnet_WebPartState_User

STORED PROCEDURES
dbo.aspnet_AnyDataInTables
dbo.aspnet_Applications_CreateApplication
dbo.aspnet_CheckSchemaVersion
dbo.aspnet_Membership_ChangePasswordQuestionAndAnswer
dbo.aspnet_Membership_ChangePasswordQuestionAndAnswer
dbo.aspnet_Membership_CreateUser
dbo.aspnet_Membership_FindUsersByEmail
dbo.aspnet_Membership_FindUsersByName
dbo.aspnet_Membership_GetAllUsers
dbo.aspnet_Membership_GetNumberOfUsersOnline
dbo.aspnet_Membership_GetPassword
dbo.aspnet_Membership_GetPasswordWithFormat
dbo.aspnet_Membership_GetUserByEmail
dbo.aspnet_Membership_GetUserByName
dbo.aspnet_Membership_GetUserByUserId
dbo.aspnet_Membership_ResetPassword
dbo.aspnet_Membership_SetPassword
dbo.aspnet_Membership_UnlockUser
dbo.aspnet_Membership_UpdateUser
dbo.aspnet_Membership_UpdateUserInfo
dbo.aspnet_Paths_CreatePath
dbo.aspnet_Personalization_GetApplicationId
dbo.aspnet_PersonalizationAdministration_DeleteAllState
dbo.aspnet_PersonalizationAdministration_FindState
dbo.aspnet_PersonalizationAdministration_GetCountOfState
dbo.aspnet_PersonalizationAdministration_ResetSharedState
dbo.aspnet_PersonalizationAdministration_ResetUserState
dbo.aspnet_PersonalizationAllUsers_GetPageSettings
dbo.aspnet_PersonalizationAllUsers_ResetPageSettings
dbo.aspnet_PersonalizationAllUsers_SetPageSettings
dbo.aspnet_PersonalizationPerUser_GetPageSettings
dbo.aspnet_PersonalizationPerUser_ResetPageSettings
dbo.aspnet_PersonalizationPerUser_SetPageSettings
dbo.aspnet_Profile_DeleteInactiveProfiles
dbo.aspnet_Profile_DeleteProfiles
dbo.aspnet_Profile_GetNumberOfInactiveProfiles
dbo.aspnet_Profile_GetProfiles
dbo.aspnet_Profile_GetProperties
dbo.aspnet_Profile_SetProperties
dbo.aspnet_RegisterSchemaVersion
dbo.aspnet_Roles_CreateRole
dbo.aspnet_Roles_DeleteRole
dbo.aspnet_Roles_GetAllRoles
dbo.aspnet_Roles_RoleExists
dbo.aspnet_Setup_RemoveAllRoleMembers
dbo.aspnet_Setup_RestorePermissions
dbo.aspnet_UnRegisterSchemaVersion
dbo.aspnet_Users_CreateUser
dbo.aspnet_Users_DeleteUser
dbo.aspnet_UsersInRoles_AddUsersToRoles
dbo.aspnet_UsersInRoles_FindUsersInRole
dbo.aspnet_UsersInRoles_GetRolesForUser
dbo.aspnet_UsersInRoles_GetUsersInRoles
dbo.aspnet_UsersInRoles_IsUserInRole
dbo.aspnet_UsersInRoles_RemoveUsersFromRoles
dbo.aspnet_WebEvent_LogEvent

Prima di installare tutte questi oggetti sul database SQL Server di Aruba, dobbiamo sostituire la parola "dbo" con "MSSql12345". Per farlo, possiamo seguire questi passi:

- In Sql Server Management Studio fare click con il tasto destro sul database che ci interessa.
- Selezioniamo il menu "Tasks > Generate Scripts".
- Selezioniamo il database che ci interessa.
- Selezioniamo gli oggetti che ci interessano da includere nello script: tabelle, viste e stored procedures.
- Selezioniamo tutte le stored procedures, le tabelle e le viste.
- Selezioniamo il flag "Script to new query windows".
- Infine facciamo click su FINISH.



Una volta che lo script è stato generato, possiamo andare a sostituire tutte le occorrenze della parola "dbo" con il nome del nostro database di Aruba (che nel nostro caso è sempre "MSSql12345").



Adesso non ci resta che incollare lo script modificato dentro il pannello MS SQL Server di Aruba e fare click sul tasto "Esegui":



13- Come ultimo passaggio per completare l'esportazione, bisogna copiare i record dalle tabelle locali in quelle di Aruba.

14- Infine per completare il tutto, apriamo il file web.config e aggiungiamo la connessione al nostro database Aruba (commentando quella precedente che si collegava al database in locale). Per recuperare i dati di connessione al vostro database collegatevi al pannello di controllo aruba ed andate nel tab "Connessioni". Li troverete l’intera stringa di connessione ma non copiatela interamente, recuperate host/nome db/password e sostituite i vostri dati a questa stringa di connessione:

<connectionStrings>
<add name="conn"
connectionString ="server=00.111.222.333;uid=VOSTROUSERNAME;pwd=VOSTRAPASSWORD;database=MSSql12345"
providerName="System.Data.SqlClient"
/>
</connectionStrings>

e commentare i provider di Memebership e Role, abilitiamo quelli di Aruba (come descritto al punto 6).

Attenzione: una volta che il vostro sito web sarà online non avrete a disposizione l'ASP.NET Configuration tool (punto 11) perché è disponibile solo in locale. Dovrete svilupparvi voi delle pagine ASP.NET per poter gestire gli utenti ed i ruoli.

Conclusioni
In questo articolo, abbiamo visto come poter utilizzare i provider di Membership e Role di ASP.NET 2.0 all'interno di un nostro sito hostato sul provider italiano Aruba. In questo specifico caso, utilizzando il servizio di SQL Server offerto da Aruba, ci eravamo trovati davanti ad una limitazione importante del provider stesso che ci dava non pochi problemi di implementazione, cioè non aver a disposizione lo schema "dbo" utilizzato invece dal .NET Framework.
I passi descritti in questa guida ci danno però la possibilità di aggirare il problema.