Vito Arconzo's Blog

.net, .net, .net & windows presentation foundation

Hosting Aruba + MembershipProvider di ASP.NET 2.0 : si può!

Mi è capitato nelle scorse settimane di dover pubblicare due applicazioni ASP.NET 2.0 in cui erano utilizzati i providers Membership, Role e Profile.

Quando ho saputo che le applicazioni dovevano girare su Aruba, per prima cosa ho pensato di scappare  (avevo letto qualcosa a proposito dei problemi relativi all'utilizzo dei provider su Aruba) ma poi, armato di santa pazienza mi sono messo al lavoro .

Il problema principale è dovuto al fatto che, l’implementazione di Microsoft dei tre provider ha, sia nelle classi che nel codice SQL, “embedded” il riferimento all’utente dbo, che non è l’utente che Aruba fornisce per accedere al server MS SQL e quindi qualsiasi storedprocedure, o metodo .net delle classi utilizza dbo.nomemetodo.

Ecco quindi i passi necessari per ovviare alla cosa:

  • Scaricare i sorgenti dei tre provider (http://download.microsoft.com/download/a/b/3/ab3c284b-dc9a-473d-b7e3-33bacfcc8e98/ProviderToolkitSamples.msi)
  • Rimuovere dai sorgenti tutti i riferimenti all’utente dbo
  • Compilare i sorgenti in modo da avere un nuovo assembly ProviderToolkitSampleProviders.dll
  • Copiare l’assembly nella cartella Bin della WebApp
  • Nel web.config nella riga corrispondente alla definizione di ognuno dei tre provider sostituire il contenuto dell’attributo type con il seguente : “Microsoft.Samples.<Nome_della_classe_del_provider>, ProviderToolkitSampleProviders”
  • Esportare gli script di viste e stored procedure, dal vostro db in locale, relative ai tre provider e rimuovete anche in questi script ogni riferimento all’utente dbo.
  • Sostituire con questi nuovi script le viste e le stored procedure presenti sull’hosting di Aruba
  • Copiare, infine, i record contenuti nella tabella aspnet_SchemaVersions dal vostro db a quello su Aruba

Ecco un esempio di modifica del file web.config:

<membership defaultProvider="MioMembershipProvider">
<providers>
<add connectionStringName="db" enablePasswordRetrieval="false" enablePasswordReset="false" requiresUniqueEmail="false" requiresQuestionAndAnswer="false" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0" applicationName="MiaApplicazione" passwordFormat="Hashed" name="MioMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</membership>

Che diventa:

<membership defaultProvider="MioMembershipProvider">
<providers>
<add connectionStringName="db" enablePasswordRetrieval="false" enablePasswordReset="false" requiresUniqueEmail="false" requiresQuestionAndAnswer="false" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0" applicationName="MiaApplicazione" passwordFormat="Hashed" name="MioMembershipProvider" type="Microsoft.Samples.SqlMembershipProvider, ProviderToolkitSampleProviders"/>
</providers>
</membership>
Tutto sembra funzionare alla perfezione quindi....Mission Completed! 

Comments

FoxyBlog said:

# June 14, 2007 12:39 PM

luigi said:

potresti mettere in download il nuovo provider, gli script sql e il web.config modificato? faresti cosa utilissima ame e a molti altri Grazie
# September 19, 2007 10:36 AM