2012-02-08 4 views
0

Ok c'est la chose la plus bizarre que je l'ai vu dans un certain temps ...DataRepeater événement _ItemCommand arrête le tir après un certain temps

J'utilise studio VS 2010 pour construire un asp.net (Framework 4.0) site web. Mon code derrière est dans VB.Net, Mon navigateur de test est Firefox (dernière version), également testé sur IE8 et Google Chrome, même comportement.

Fondamentalement, j'ai un LinkButton dans un DataRepeater dans un UpdatePanel. L'événement _ItemCommand FEUne tant que j'utilise la page régulièrement (toutes les quelques minutes environ). Le problème est le suivant: lorsque j'ouvre une autre page Web (dans un autre onglet du navigateur) et que je suis assis pendant une heure environ, puis revenez sur la page de test dans l'onglet du navigateur et cliquez sur le LinkButton, aucun événement n'est viré et la page obtient une recharge. Comme si le bouton venait de mourir sur moi. J'ai d'abord eu du mal à trouver un problème de session TimeOut, mais j'ai enregistré le SessionID dans un fichier texte et la Session N'EXTEND PAS. < < < < aide d'une nouvelle méthode de détection TimeOut

Je peux confirmer (logfiles) que la racine de mon problème est que l'événement _ItemCommand arrête simplement le tir. Je n'ai aucune idée de pourquoi c'est le cas.

J'ai essayé la plupart des solutions proposées sous des problèmes similaires (l'événement ne se déclenche pas) mais mon problème est positivement différent car mon événement se déclenche ... Seulement pour un temps limité.

Mon répéteur ViewState est activé. J'ai essayé de changer le LinkButton pour un bouton mais pas de joie même problème. J'ai essayé le uping le AsyncPostBackTimeout du ScryptManager ... pas de joie non plus. J'ai essayé le mode sessionState = "StateServer". J'ai essayé de désactiver mon scanner de liens AVG.

Alors s'il vous plaît, aucune idée ... Ne soyez pas timide, à ce stade, je suis prêt à envisager n'importe quoi.


Voici le code que je suis maintenant utiliser pour vérifier la session Délai d'attente:

If Context.Session IsNot Nothing And Context.Session.IsNewSession _ 
    And Page.Request.Headers("Cookie") IsNot Nothing _ 
    And Page.Request.Headers("Cookie").IndexOf("ASP.NET_SessionId") >= 0 Then 

    'SESSION HAS TIMEDOUT 
End If 

EST ICI LA PAGE MARKUP

<asp:UpdatePanel ID="udpRSSFeeds" runat="server" UpdateMode="Conditional"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="cmdSearch" EventName="Click" /> 
     <asp:AsyncPostBackTrigger ControlID="drpNewsFeed" EventName="ItemCommand" /> 
     <asp:AsyncPostBackTrigger ControlID="cmdViewAll" EventName="Click" /> 
    </Triggers> 
    <ContentTemplate> 

     <table class="Borderless" cellpadding="0" cellspacing="0" style="width:100%"> 
     <tr><td class="lblHeaderText">NEWS FEEDS</td></tr> 

     <%--BEGIN: SEARCH GIZMO--%> 
     <tr><td> 
      <table class="Borderless" style="width:100%;" cellpadding="0" cellspacing="0"> 
       <tr> 
        <td style="text-align:right; vertical-align:middle; height:32px;" > 
         <asp:TextBox ID="tbxSearchBox" runat="server" MaxLength="50" AutoCompleteType="None" Font-Size="16px" style="height:20px; width:187px; font-size:16px; border-style:solid; border-color:#54d242;" onfocus="Javascript:this.focus();this.select();" ></asp:TextBox> 
        </td> 
        <td style="text-align:left; vertical-align:middle; width:150px; height:32px;" > 
         <asp:ImageButton ID="cmdSearch" ImageUrl="~/GUIImages/cmdSearch.jpg" ToolTip="Search feed(s) for keyword(s)." Height="26px" Width="26px" runat="server" BorderStyle="None" ImageAlign="Middle" /> 
        </td> 
       </tr> 
      </table> 
     </td></tr> 
     <%--END: SEARCH GIZMO--%> 

     <%--BEGIN FEED LIST--%> 
     <tr><td style="padding:3px 0px 3px 0px;"><asp:LinkButton ID="cmdViewAll" runat="server" CssClass="MenuItemActive" PostBackUrl="" CausesValidation="false" Text="* View ALL RSS Feeds"></asp:LinkButton></td></tr>       
     <asp:XmlDataSource ID="xdsNewsFeed" runat="server" DataFile="App_Data/RSSFeeds.xml" XPath="dataroot/qryRSSFeed"></asp:XmlDataSource> 
     <asp:Repeater ID="drpNewsFeed" runat="server" DataSourceID="xdsNewsFeed" EnableViewState="true" > 
      <ItemTemplate> 
       <tr><td style="padding:3px 0px 3px 0px;"> 
        <asp:LinkButton ID="cmdSelectNewsFeed" runat="server" CssClass="MenuItem" CausesValidation="false" CommandName='<%#XPath("ID")%>'>- <%#XPath("Title")%></asp:LinkButton> 
       </td></tr> 
      </ItemTemplate> 
     </asp:Repeater> 
     <%--END FEED LIST--%> 

     <tr><td>&nbsp;</td></tr> 
     </table> 

    </ContentTemplate> 
</asp:UpdatePanel> 

VOICI LE CODE DE PAGE DERRIÈRE

Protected Sub drpNewsFeed_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles drpNewsFeed.ItemCommand 
    Dim oLogger As New nebLogManager("TESTNWOSGN.txt") 

    oLogger.TraceStart("drpNewsFeed_ItemCommand (" & Session.SessionID & ")") 

    'some code that never gets run because the event is not fired... 

    oLogger.TraceStop("drpNewsFeed_ItemCommand (" & Session.SessionID & ")") 
End Sub 


Protected Sub cmdSearch_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles cmdSearch.Click 
    Dim oLogger As New nebLogManager("TESTNWOSGN.txt") 


    oLogger.TraceStart("cmdSearch_Click (" & Session.SessionID & ")") 

    'some code that never gets run because the event is not fired... 

    oLogger.TraceStop("cmdSearch_Click (" & Session.SessionID & ")") 
End Sub 

Je ne sais pas si c'est important mais il utilise un master_page sur lequel se trouve le ScriptManager


SCÉNARIO TEST COMPLET:

  1. PARCOURIR À: http://www.nwosurvivalguide.com/NWOSGN.aspx
  2. CLIQUEZ sur un Feed Nouvelles (côté gauche)
  3. LET reposer 30 minutes
  4. RETOURNEZ et cliquez sur un autre flux d'actualités

Résultat >>> Événement non déclenché mais charge de page Page_Init détecte un délai d'attente de session. Si vous actualisez la page, tout redevient fonctionnel.

+0

"J'ai consigné le SessionID dans un fichier texte" - comment est-ce que cela fait que la session n'a pas expiré? Le délai par défaut est de 20 minutes je pense, donc si vous avez attendu une heure et que votre fichier texte indique que la session n'a pas expiré, et que vous n'avez pas modifié le timeout dans web.config, alors je pense que vous vous connectez. Ne fais pas ce que tu penses faire. – jhsowter

+0

L'ID de session est stocké dans un cookie et la valeur aspnet_sessionId du cookie est réutilisée pour les sessions suivantes, même si elles ont expiré du côté serveur. – jhsowter

+0

Humm Je vois ... J'avais l'impression que chaque nouvelle session recevrait un nouveau SessionID ... C'est comme ça qu'il se comportait localement ... J'ai essayé d'augmenter le timeout de la session à 120 minutes ... toujours pas de joie. Je sais que même si je mets le délai d'expiration de ma session à 120, certains réglages de serveur peuvent l'emporter sur ... Quelqu'un a une bonne idée pour m'aider à vérifier si la session expire? – user1196190

Répondre

1

D'abord, je tiens à remercier JHSOWTER de remarquer que ma logique initiale de détection de délai de session était erronée. Cela m'a vraiment renvoyé sur la bonne voie. Donc, le problème était que ma session arrivait à expiration en raison du recyclage du pool d'applications.

La solution SessionTimeout standard ne fonctionnerait pas car je suis sur un hébergeur partagé qui contrôle le délai d'expiration du pool d'applications.

La solution a été d'ajouter les lignes suivantes dans le fichier web.config (dans la balise <system.web>):

<sessionState timeout="60" cookieless="false" mode="StateServer" /> 
<machineKey ... /> 

Susciter ma machine porte-clés J'ai utilisé cet outil: http://aspnetresources.com/tools/machineKey

Après ces changements tous mes problèmes sont partis.

Encore merci beaucoup pour l'aide.

+0

Heureux cela a été réglé! – jhsowter

0

J'ai fait un tour de table pour trouver cela et j'ai trouvé que quelques personnes avaient un comportement similaire à cause du scanner AVG Link.

Firefox __doPostBack not working after idle time

http://forums.asp.net/post/4021595.aspx

+0

Vérifie, teste et rapporte. Merci. – user1196190

+0

Désactivé mon scanner AVG Link, toujours pas de joie. – user1196190

+0

Prendre contact avec mon hébergeur pour voir s'il exécute AVG sur le serveur. Va rapporter l'once je sais plus. – user1196190

Questions connexes