2010-10-04 9 views
1

Je tente de créer un service d'authentification de formulaires ASP.NET personnalisé à l'aide de WCF. Je l'appelle via une page de test qui ne contient qu'une seule ligne de JS (à l'exception des scripts ScriptManager). Le problème est que le serveur renvoie le code de réponse 500 et le corps de la réponse est vide. Mes points d'arrêt dans la méthode de service et dans l'erreur Application_Error dans Global.asax ne sont pas touchés.Service d'authentification de formulaires ASP.NET personnalisé avec WCF

Sys.Services.AuthenticationService.login('user', 'pass', false, null, null, null, null, null); 

Je peux voir la demande aller au serveur dans les outils de votre navigateur avec le corps de la requête suivante:

{"userName":"user","password":"pass","createPersistentCookie":false} 

D'autres choses du côté de la demande semblent aussi bien.

Voici le service de configuration:

<system.serviceModel> 
    <behaviors> 
    <endpointBehaviors> 
     <behavior name="BtxAuthenticationEndpointBehavior"> 
     <webHttp/> 
     </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    </serviceBehaviors> 
    </behaviors> 
    <services> 
    <service name="MyNamespace.BtxAuthenticationService"> 
     <endpoint contract="MyNamespace.IBtxAuthenticationService" binding="webHttpBinding" behaviorConfiguration="BtxAuthenticationEndpointBehavior"/> 
    </service> 
    </services> 
</system.serviceModel> 

Et la déclaration de l'interface:

[ServiceContract] 
public interface IBtxAuthenticationService 
{ 
    [OperationContract] 
    [WebInvoke] 
    bool Login(string username, string password, bool createPersistentCookie); 

    [OperationContract] 
    [WebInvoke] 
    void Logout(); 
} 

La mise en œuvre:

public class BtxAuthenticationService : IBtxAuthenticationService 
{ 
    public bool Login(string username, string password, bool createPersistentCookie) 
    { 
     ... irrelevant because this is never hit 
    } 

    public void Logout() 
    { 
    } 
} 

Quelqu'un peut-il me dire comment configurer ceci ou Montrez-moi un moyen de le déboguer. Un article sur l'implémentation de l'authentification par formulaires personnalisée avec un service WCF sera également le bienvenu. J'ai essayé d'expérimenter avec divers autres paramètres, y compris tous les paramètres de détails d'exception que je pouvais trouver mais je n'ai pas pu progresser (bien que je puisse faire une régression et obtenir des exceptions différentes comme des points de terminaison manquants etc.).

Nous vous remercions de votre temps.

Répondre

1

Vous ne savez pas si cela vous aide. Je n'ai jamais écrit un tel service mais votre configuration crée un service WCF qui n'est pas compatible ASP.NET AJAX et fonctionne avec XML au lieu de JSON. Essayez d'utiliser ceci au lieu du comportement webHttp:

<endpointBehaviors> 
    <behavior name="BtxAuthenticationEndpointBehavior"> 
    <enableWebScript /> 
    </behavior> 
</endpointBehaviors> 
+0

J'ai déjà essayé ceci. Je vais essayer à nouveau demain quand j'arriverai à ma machine de travail mais je crois que enableWebScript est responsable de fournir le proxy JS qui n'est pas nécessaire dans ce cas. Je peux me tromper sur cela mais même si c'est le problème, je devrais être capable de voir quelques erreurs plus descriptives. – Stilgar

+0

Oui, vous avez raison. EnableWebScript permet d'ajouter un service en tant que référence à ScriptManager et fournit un proxy JS. Mais il change également le format du message en JSON. Vous pouvez également le faire dans l'attribut WebInvoke en définissant les formats Requête et Réponse. Essayez également d'activer le niveau de compatibilité AspNet. –

+0

J'ai essayé de définir le format via l'élément webHttp (il a un attribut pour cela) mais cela n'a pas aidé. – Stilgar