web-dev-qa-db-ja.com

ASP.NETセッションが期限切れまたは見つからなかった-> Session.SessionIDが変更されたため(Reporting Services)

1.-レポートサービスを使用していますが、このエラーが発生することがありますASP.NET session has expired or could not be foundレポートを読み込もうとすると、.

2.-ユーザーが同じでも、Session.SessionIDプロパティが変更されると、このエラーが発生することに気付きました。変化しない場合は、レポートが読み込まれます。つまり、レポートを何度も更新すると、Session.SessionIDが前回のものと同じである場合は常に、レポートが読み込まれます。

3.-Microsoftのドキュメントによると:

Cookieベースのセッション状態を使用する場合、ASP.NETは、Sessionオブジェクトが使用されるまで、セッションデータ用のストレージを割り当てません。その結果、セッションオブジェクトがアクセスされるまで、ページ要求ごとに新しいセッションIDが生成されます。アプリケーションでセッション全体に静的セッションIDが必要な場合は、アプリケーションのGlobal.asaxファイルにSession_Startメソッドを実装し、データをSessionオブジェクトに格納してセッションIDを修正するか、またはコードの別の部分でコードを使用できます。 Sessionオブジェクトにデータを明示的に格納するアプリケーション。

アプリケーションがcookielessセッション状態を使用する場合、セッションIDは最初のページビューで生成され、セッション全体で維持されます。

ポイントは、Cookieが必要なため、Cookieなしのセッション状態を使用できないことです。

このエラーを回避するにはどうすればよいですか?または、Session.SessionIDがリクエストごとに変更されないようにするにはどうすればよいですか?

11
user1239198

セッションをInProcessに保存している可能性があります。セッション状態サーバーに変更してみてください。詳細は こちら をご覧ください。

6

レポートビューア11.0.0を使用しています。 system.webセクションのweb構成に、次の構成を追加します。

<sessionState timeout ="120" mode="InProc" cookieless="false" />

Reportviewerオブジェクトでレポート(C#コードは以下)を生成する場合は、KeepSessionAliveプロパティをfalseに、AsynkRenderingプロパティをfalseに変更します。これですべてです。

        this.rvReporte.KeepSessionAlive = false;
        this.rvReporte.AsyncRendering = false;

(rvReporte)は、私のasp.netフォームにあるReportViewerコントロールです。このソリューションは私にとってうまくいきます。

よろしく

4
hardvin
<httpCookies httpOnlyCookies="false" requireSSL="false"/>

問題を解決しました。おかげで: http://www.c-sharpcorner.com/Blogs/8786/reportviewer-Asp-Net-session-has-expired.aspx

2
A Ghazal

イントラネットの外部からWebサイトにアクセスした場合、レポートビューアーページでも同じ問題が発生しました。 hardvinの提案により、this.rvReporte.KeepSessionAlive = falseを設定するという1日が節約されました。 this.rvReporte.AsyncRendering = false;

コントロール自体のプロパティを変更しました。ユーザーにプロンプ​​トを表示する代わりに、ホストページでプログラムによってパラメーターを提供するためのカスタムイベントを発生させるユーザーコントロールのレポートビューアーを使用しています。

2
Denny Jacob

この問題を解決するには、reportviewerサーバーコントロールでAsyncRenderingをfalseに設定します。

2
Alex

Alexsandarの答えは、この問題の解決策の1つにすぎません。

このリンクは、この問題の根本原因と考えられる解決策を明確に説明しています: http://blogs.msdn.com/b/brianhartman/archive/2009/02/15/did-your-session-really- expire.aspx

IISサーバーが1つしかない場合、コード内にセッションオブジェクトを使用すると問題が解決します。ブラウザからサーバーへのリクエストで渡されるものは、サーバー上の対応するセッションIDにマッピングされるため、セッションの期限切れメッセージは送信されません。

モードの設定は、ブライアンが複数のIISサーバーが同じリクエストを処理しているサーバークラスターの場合にのみ機能します。その場合、アウトプロセスモードは、セッションからセッションオブジェクトを取得するのに役立ちますサーバーのヒットに関係なく保存します。

したがって、この観察に基づいて、ブライアンの問題はCookieではなくサーバークラスターに関連していると結論付けます。ブライアンが彼の質問で提供した情報とその後の解決策は私を惑わし、それゆえこの説明を誤解させました。同様の問題を探している人に役立つことを願っています。

ありがとう、Vipul

1
user398039

私がAzureでホストしているWebアプリをオンにすると、ARR Affinityで問題が解決しました。

ARRアフィニティ[〜#〜] on [〜#〜]

enter image description here

0
ManirajSS

私にとっては、アプリプールに複数のワーカープロセスがあることがわかりました。

0
Joe.P

呼び出し元のASPXページの上部からSessionState = "somevalue"タグを削除してみてください。 Azureに複数のインスタンスがあるため、カスタムSessionStateを使用しており、InProcの使用を拒否しています。必要に応じて、AsyncRendering = Trueを使用することもできます。これでうまくいったかどうか教えてください。

0
Rudy Hinojosa