0

わかりました、これは私がしばらくの間見た中で最も奇妙なものです...

VS studio 2010 を使用して、asp.net (フレームワーク 4.0) Web サイトを構築しています。私のコード ビハインドは VB.Net にあります。私のテスト ブラウザは Firefox (最新バージョン) で、IE8 と Google Chrome でも同じ動作でテストされています。

基本的に、UpdatePanel の DataRepeater に LinkBut​​ton があります。_ItemCommand イベントは、ページを定期的に (数分おきに) 使用している限り発生します。

問題は次のとおりです。別の Web ページを (別のブラウザー タブで) 開いて 1 時間ほどそこに座ってから、ブラウザー タブのテスト ページに戻って LinkBut​​ton をクリックすると、イベントが発生せず、ページが表示されません。リロードを取得します。ボタンがちょうど私に死んだかのように。

セッション タイムアウトの問題である可能性がありますが、セッション ID をテキスト ファイルに記録したところ、セッションは期限切れになりませんでした。<<<< TimeOut を検出するための新しいメソッドの使用

問題の根本原因は _ItemCommand イベントの発生が単に停止することであることを確認できます (ログファイル)。なぜそうなるのかわからない。

同様の問題(イベントが発生しない)で提案されたほとんどのソリューションを試しましたが、イベントが発生するため、問題は明らかに異なります...限られた時間だけです。

リピーター ViewState が有効になっています。Button の LinkBut​​ton を変更しようとしましたが、同じ問題はありません。私は ScryptManager の AsyncPostBackTimeout を上げようとしました...喜びもありません。sessionState mode="StateServer" を試しました。AVG リンク スキャナーを無効にしようとしました。

だからお願いします、どんなアイデアでも...恥ずかしがらないでください、この時点で私は何でも考える準備ができています.


セッションタイムアウトを確認するために現在使用しているコードは次のとおりです。

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

これがページのマークアップです

<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>

これがページコードビハインドです

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

重要かどうかはわかりませんが、ScriptManager がある master_page を使用します


包括的なテスト シナリオ:

  1. 参照: http://www.nwosurvivalguide.com/NWOSGN.aspx
  2. ニュースフィードをクリック(左側)
  3. 30分ほど放置
  4. 戻って別のニュースフィードをクリックしてください

結果 >>> イベントは発生しませんが、ページが読み込まれます Page_Init はセッション タイムアウトを検出します。ページを更新すると、すべてが再び機能するようになります。

4

2 に答える 2

1

最初に、最初のセッション タイムアウト検出ロジックに欠陥があることを指摘してくれたJHSOWTERに感謝します。それは本当に私を正しい軌道に戻しました。

問題は、アプリケーション プールのリサイクルが原因でセッションがタイムアウトしたことでした。

アプリケーション プールのタイムアウトを制御する共有ホストを使用しているため、標準の SessionTimeout ソリューションは機能しません。

解決策は、次の行を Web.Config ファイル (<system.web>タグ内)に追加することでした。

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

マシン キー タグを生成するために、次のツールを使用しました: http://aspnetresources.com/tools/machineKey

これらの変更の後、私の問題はすべて解消されました。

再び助けてくれてありがとう。

于 2012-02-15T16:23:09.733 に答える
0

私はこれをグーグルで検索しましたが、AVGリンクスキャナーが原因で同様の動作をしている人はかなり少ないことがわかりました。

Firefox__doPostBackがアイドル時間後に機能しない

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

于 2012-02-10T01:18:27.193 に答える