2009-10-19 15 views
1

Nous avons une application web asp.net 2.0 qui fonctionne sur IIS7. Il utilise des jardins web et le serveur d'état asp.net.Asp.net 2.0 La méthode des clics sur les boutons fonctionne de manière incohérente dans un jardin web

Sur la page, il existe de nombreuses commandes utilisateur. Sur l'un des contrôles utilisateur, nous avons ajouté la journalisation sur l'événement button_click qui écrit une ligne dans le journal à chaque fois que cette méthode s'exécute. Lorsque nous cliquons sur le bouton, il affiche seulement périodiquement l'entrée du journal - indiquant que l'événement ne se déclenche pas toujours lorsque le bouton est cliqué. Nous avons ajouté la journalisation car nous soupçonnions que la méthode de clic sur les boutons ne fonctionnait pas toujours lorsque nous cliquions sur le bouton. Les preuves que nous voyons semblent confirmer nos soupçons. Lorsque nous supprimons le jardin Web et que nous remettons le site dans un pool d'applications unique, l'application revient à la normale: l'événement du bouton se déclenche à chaque fois. Lorsque nous exécutons l'application sur des machines de développement locales, cela fonctionne également normalement.

Est-ce que quelqu'un d'autre a vu un comportement comme celui-ci? Existe-t-il des recommandations sur les prochaines mesures que nous pourrions prendre pour affiner le problème?

EDIT: voici la source de l'événement comme demandé:

protected void btnSearch_Click(object sender, EventArgs e) 
    { 
        Log.Error("Searching..."); 

        SearchArgs args = CtrlToSearchArgs(); 
        SessionManager.SearchQueryString = Request.QueryString; 

        string url = NavigationManager.BuildSearchUrl(args, null, "*** page url removed here ***"); 

        if (args.PageSize.HasValue) 
        { 
            SessionManager.SetInSession(SessionManager.Key.SEARCH_PAGESIZE, args.PageSize.Value.ToString()); 
        } 
        else 
        { 
            SessionManager.SetInSession(SessionManager.Key.SEARCH_PAGESIZE, "10"); 
        } 

        SessionManager.SearchPanelData = url; 

        //Set the new args into the session 
        SessionManager.SearchControlArgs = args; 

        Response.Cache.SetCacheability(HttpCacheability.NoCache); 
        Response.Redirect(url); 
    } 

EDIT # 2: Précisions - cette configuration est de ne pas utiliser plusieurs serveurs et n'est pas sous un équilibreur de charge. Nous utilisons plusieurs AppPools sur un seul serveur.

+0

Post le code de bouton_click ... – cjk

Répondre

0

Merci Freddy et Jason pour avoir posté des réponses. Au cours de notre processus de dépannage, nous avons décidé de revenir à un pool d'applications unique. Cela semblait être une façon peu orthodoxe de structurer les choses de toute façon. Cependant, cela n'a pas réglé le problème non plus. Après avoir fait le tour de la machine et que quelques personnes ont passé le code, nous avons finalement découvert que nous avions un objet stocké dans une session qui contenait des variables statiques. Nous avons corrigé ce problème et le site a commencé à fonctionner comme prévu.

0

Vous souhaitez probablement activer les sessions persistantes sur votre équilibreur de charge.

Dans le passé, j'ai rencontré une situation similaire où la page a été rendue par le serveur A, mais la publication a été envoyée au serveur B provoquant un échec de valider la publication. Alternativement, au lieu d'utiliser la session collante, vous pouvez également regarder manuellement setting your MachineKey pour être le même pour tous les serveurs.

+0

Nous n'exécutons pas réellement plusieurs serveurs ou n'exécutons pas sous un équilibreur de charge. Nous utilisons plusieurs AppPools sur le même serveur - pour des raisons de performances. – meh

1

Définissez la clé de la machine: http://msdn.microsoft.com/en-us/library/ms998288.aspx

Ce n'est pas le seul scénario qui échoue lorsque vous n'avez pas la clé de la machine spécifiée à savoir si le pool d'applications est redémarré les principaux changements de la machine généré et vous obtenez des défaillances dans tout ce qui en dépend, c.-à-d. validation viewstate étant un, un autre: ASP.NET MVC Validation of ViewState MAC failed

+0

Nous venons de découvrir que nous avons le jeu de clés de la machine. – meh