2013-05-20 1 views
0

Bonjour, j'ai ce problème avec l'authentification et la création d'un élément de base de données. Dans la documentation, il est indiqué que l'authentification doit être appelée avant la création. Donc, voici le code que j'ai fait et je me demande si j'ai les événements dans le mauvais ordre.authentification avant la création de l'élément de base de données

private void ApplicationBarIconButton_Click_5(object sender, EventArgs e) 
    { 
     Gateway.AuthenticateAsync("username", "password1", "username2", "password2"); 
     Gateway.AuthenticateCompleted += new EventHandler<ServiceReference.AuthenticateCompletedEventArgs>(AuthenticateTime);  
    } 

    private DateTime _nestedDateStart; 
    private DateTime _nestedDateEnd; 
    private DateTime _nestedDateStartBreak1; 
    private DateTime _nestedDateEndBreak1; 
    private DateTime _nestedDateStartBreak2; 
    private DateTime _nestedDateEndBreak2; 

    ServiceReference.TimereportDto Timereport = new ServiceReference.TimereportDto(); 

    void AuthenticateTime(object sender, ServiceReference.AuthenticateCompletedEventArgs e) 
    { 

     Gateway.AuthenticateAsync("username1", "password1", "username2", "password2");  

     Timereport.Started = _nestedDateStart; 
     Timereport.Ended = _nestedDateEnd; 

     Timereport.Break1Start = _nestedDateStartBreak1; 
     Timereport.Break1End = _nestedDateEndBreak1; 

     Timereport.Break2Start = _nestedDateStartBreak2; 
     Timereport.Break2End = _nestedDateEndBreak2; 

     Timereport.Comment = Notes.Text; 
     Timereport.EmployeeSignature = "apptest"; 

     Gateway.CreateTimereportAsync(Timereport,"ABD"); 
     Gateway.CreateTimereportCompleted += new EventHandler<ServiceReference.CreateTimereportCompletedEventArgs>(CreateTimereportCompleted); 

    } 

    void CreateTimereportCompleted(object sender, ServiceReference.CreateTimereportCompletedEventArgs e) 
    { 

    } 

Quand je mis un point d'arrêt sur "CreateTimereportCompleted" i get erreur, comme indiqué ci-dessous dans l'image:

enter image description here

Comme vous pouvez le voir retourne un message "Accès refusé, s'il vous plaît vous connecter" . Donc parce que les noms d'utilisateur et les mots de passe sont corrects je me dis que je dois avoir le code dans le mauvais ordre ou quelque chose.

MISE À JOUR

Gateway est une ServiceReference qui ressemble à ceci:

ServiceReference.GatewaySoapClient Gateway = new ServiceReference.GatewaySoapClient(); 

Et si le cookie d'authentification est censé être transmis au prochain appel de service je ne sais pas. Rien ne le dit dans la documentation.

Ils ont dans la documentation ci-dessous l'authentification un CookieContainer mais n'est ce pas seulement quand vous le faites pour un webbrowser?

Toute personne qui peut m'aider?

+0

Pouvez-vous s'il vous plaît étendre la question d'inclure .. ce qui est GateWay objet et fait cela a-t-il quelque chose à voir avec le cookie d'authentification transmis à l'appel de service suivant? –

+0

Avez-vous mis à jour ma question, espérons qu'elle donne plus de sens au désordre – mogren3000

+0

GatewayAuthenticateAsync est votre appel WCF et est-il lié au service d'authentification par défaut WCF ou à votre propre implémentation?Ou essayez d'appeler Authenticate dans votre code wcf pour CreateTimereportAsync et voyez une fois que l'appel a réussi essayez d'obtenir les données de la base de données .. (Call to Authenticate passe avant la récupération de Database dans la méthode CreateTimereport de WCF juste pour vérifier si elle fonctionne –

Répondre

1

Méthode 1: - (sans force le passage des cookies par code)

Dans votre configuration web ASMX ajouter aspNetCompatibilityEnabled = "true" et réglez AllowCookies = false

Dans votre ServiceReferences.ClientConfig add AllowCookieContainer = true

Méthode 2: - (Transmission des cookies via le code)

Dans votre configuration web ASMX set AllowCookies = true Dans votre ServiceReferences.ClientConfig ajouter AllowCookieContainer = true et vous pouvez définir

client.CookieContainer = yourCookieContainerVariable

et passer le long de cette 'yourCookieContainerVariable' au service suivant appel.

Cette méthode est particulièrement utile lorsque vous avez une URL distincte pour votre authenticationa e d'autres fonctions commerciales

Comme l'illustre: http://www.kotancode.com/2010/08/06/aspnet-authentication-wp7/

Questions connexes