2009-09-03 10 views
2

J'essaie donc d'obtenir un système simple de travail où j'ai une application web asp.net mvc avec les formes d'authentification déjà en cours d'exécution et avec un utilisateur créé. Je peux me connecter sans problème en utilisant le contrôleur/affichage mvc.ASP.NET MVC + Silverlight + authentification par formulaire

J'ai ensuite ajouté une application silverlight à la solution, en utilisant l'application Web existante comme hôte. J'ai créé un service Web activé silverlight et ajouté un contrat de coopération avec le code suivant:

[OperationContract] 
    public bool Authenticate(string username, string password) 
    { 
     if (FormsAuthentication.Authenticate(username, password)) 
     { 
      FormsAuthentication.SetAuthCookie(username, false); 
      return true; 
     } 
     return false; 
    } 

Dans l'application silverlight, j'ai ajouté deux zones de texte et un bouton, et une référence de service au service WCF. En cas de clic de bouton, j'ai ce code:

void login_Click(object sender, RoutedEventArgs e) 
    { 
     AuthenticationService.AuthenticationClient client = new AuthenticationClient(); 
     client.AuthenticateCompleted += new EventHandler<AuthenticateCompletedEventArgs>(client_AuthenticateCompleted); 
     client.AuthenticateAsync(username.Text, password.Text); 
    } 

    void client_AuthenticateCompleted(object sender, AuthenticateCompletedEventArgs e) 
    { 
     if (e.Result) 
     { 
      MessageBox.Show("Success"); 

     } 
     else 
     { 
      MessageBox.Show("Error"); 
     } 
    } 

Le problème est, quand j'entrer mes informations de connexion et cliquez sur le bouton, tout ce que je reçois est la zone d'erreur. Je n'arrive pas à l'obtenir pour authentifier l'utilisateur.

Que manque-t-il?

MISE À JOUR: Voici l'erreur que je reçois dans le gestionnaire complet async:

Ligne: 86 Erreur: Erreur dans Unhandled application Silverlight code: 4004
Catégorie: ManagedRuntimeError
Message: System.NullReferenceException : La référence d'objet n'est pas définie à une instance d'un objet. à UserPortal.MainPage.client_AuthenticateCompleted (sender d'objets, AuthenticateCompletedEventArgs e) à UserPortal.AuthenticationService.AuthenticationClient.OnAuthenticateCompleted (Object state)

MISE À JOUR 2: donc l'erreur i est posté ci-dessus parce que la propriété e.Error est nul. Donc, je ne reçois aucune erreur spécifique du service d'authentification. Y at-il quelque chose que je dois changer dans le web.config pour que cela fonctionne via Silverlight?

<authentication mode="Forms"> 
    <!-- forms loginUrl="~/Account/LogOn" timeout="2880"/ --> 
    </authentication> 
    <membership> 
     <providers> 
      <clear/> 
      <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/"/> 
     </providers> 
    </membership> 
    <profile> 
     <providers> 
      <clear/> 
      <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ApplicationServices" applicationName="/"/> 
     </providers> 
    </profile> 
    <roleManager enabled="false"> 
     <providers> 
      <clear/> 
      <add connectionStringName="ApplicationServices" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 
      <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 
     </providers> 
    </roleManager> 
+0

Pouvez-vous s'il vous plaît essayer MessageBox.Show (e.ToString()) ou MessageBox.Show (e.Error.ToString()) ou d'essayer d'imprimer toute erreur et vous obtiendrez exactement ce que l'erreur est. –

Répondre

0

Ok, donc je l'ai eu à travailler, un peu.

Après le contenu here i a réussi à obtenir un service opérationnel qui me permettrait de se connecter avec succès. Le problème est que j'ai dû changer le RequireSSL à false. Je ne pouvais pas faire fonctionner le service sur https.

Quelqu'un sait ce que je dois faire pour le faire fonctionner sur SSL? J'utilise le serveur de développement ASP.NET en ce moment, dois-je configurer une vraie version d'IIS sur cette boîte pour que cela fonctionne?

+0

Je fais beaucoup de #if DEBUG RequireSSL = false #else RequireSSL #endif type choses pour contourner ce manque particulier du serveur de développement ASP.Net – thaBadDawg

0

Lorsque vous utilisez WCF et en cours d'exécution sur un serveur de développement, vous devez avoir des certificats appropriés installés. ce n'est pas silverlight c'est le proxy client wcf qui essaie de vérifier votre vertificate et échoue je pense. Que se passe-t-il lorsque vous essayez de le frapper depuis asp ou le navigateur?

Questions connexes