środa, 5 maja 2010

WCF Ria Services – Membership provider

Pracę z WCF Ria Services dobrze jest rozpocząć od stron MSDN na których znajdziemy wyczerpujące informacje w tym zakresie.
W pierwszej kolejności zainteresował mnie rozdział „Authentication, Roles, and Profiles”. Rozdział „Walkthrough: Using Authentication Service with Silverlight Business Application” zapowiadał się zachęcająco, jednak wykonując kolejne kroki można napotkać na kilka niespodzianek…
Tworzymy w Visual Studio 2010 nowy projekt używając template Silverlight Business Application. Automatycznie tworzą się dwa projekty, jeden z nich jest klientem a drugi projekt z rozszerzeniem .Web serwerem.  Uruchamiamy aplikację ASP.NET Configuration, która umożliwia nam konfigurację z poziomu Visual Studio użytkowników i ról dla naszej aplikacji. Niestety już na tym etapie nie można uruchomić konfiguratora. Otrzymuje informację o braku dostępu do serwera sql.
Sprawdzamy Web.config.
<?xml version="1.0"?>
<configuration>
 <configSections>
  <sectionGroup name="system.serviceModel">
    <section name="domainServices" type="System.ServiceModel.DomainServices.Hosting.DomainServicesSection, 
     System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, 
     PublicKeyToken=31BF3856AD364E35" allowDefinition="MachineToApplication" requirePermission="false" />
 </sectionGroup>
 </configSections>
 <system.web>
  <httpModules>
    <add name="DomainServiceModule" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule,
    System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </httpModules>
  <compilation debug="true" targetFramework="4.0" /> 
  <roleManager enabled="true"/>
  <authentication mode="Forms">
    <forms name=".BusinessApplication1_ASPXAUTH" />
  </authentication>
  <profile>
    <properties>
      <add name="FriendlyName"/>
  </properties>
  </profile>
 </system.web>
 <system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="DomainServiceModule" preCondition="managedHandler"
      type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, 
      Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </modules>
 </system.webServer>
 <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
</configuration>
Niestety brak sekcji connectionString, która zawiera dane do połączenia z serverem sql. Brak również wpisu sqlMembershipProvider. Idąc najprostrzą drogą otwieramy nową instancję Visual Studio 2010 i tworzymy nowy projekt ASP.NET Web Site, który generuje nam odpowiedni template. Dla pewności z poziomu tego projektu uruchamiamy ASP.NET Configuration w celu weryfikacji web.config. W tym przypadku nie powinniśmy napotkać na trudności. Ustawienia domyślne dla ASP.NET Web Site powinny być wystarczające pod warunkiem, że wraz z Visual Studio zainstalowaliśmy Sql Server 2008 Express Edition.
Domyślnie baza Membership Privider jest tworzona w App_Data i podpinana do instacji sql w formie pliku .mdf.  Jeżeli mamy nie zależną instancję Sql Server 2008 lub 2005 to musi odpowiednio zmodyfikować web.config w sekcji connectionString. W rzeczywistości w zaawansowanych aplikacjach tworzymy bazę Membership Provider na serwerze sql. W tym celu korzystamy z narzędzia aspnet_regsql.exe, które znajduje się C:\WINDOWS\Microsoft.NET\Framework\v2.0…..
Jeżeli testowa strona asp.net działa prawidłowo i możemy korzystać z logowania i rejestracji,  z powodzeniem przenosimy parametry web.config do poprzedniego projektu Silverlight Business Application.
Wprowadzamy następujące elementy do Web.config
<membership>
  <providers>
   <clear/>
   <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider"
        connectionStringName="ConnectionString"
        enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false"
        requiresUniqueEmail="false"
        maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6"
        minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
        applicationName="/" />
 </providers>
</membership>

<roleManager enabled="true" defaultProvider="SqlRoleProvider">
 <providers>
   <remove name="SqlRoleProvider" />
   <add name="SqlRoleProvider" type="System.Web.Security.SqlRoleProvider"
        applicationName="/" connectionStringName="ConnectionString"/>
 </providers>
</roleManager>
<profile>
 <providers>
  <clear/>
  <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider"
   connectionStringName="ConnectionString" applicationName="/"/>
 </providers>
 <properties>
   <add name="FriendlyName" />
 </properties>
</profile>

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

Brak komentarzy:

Prześlij komentarz