2

ユーザーがアプリケーションから強制的にログアウトされるという断続的な問題が発生しています。

私たちのセットアップは、Windows Server 2003 Standard Edition 上の ASP.Net/C# Web アプリケーションであり、バックエンドに SQL Server 2000 があります。最近、クライアントの VMWare サーバーで主要な製品アップグレードを実行しました (専用のゲスト インスタンスがあります)。以前のリリースではこれらの問題はまったくありませんでしたが、新しいアップグレードが製品にもたらす複雑さが増し、問題が発生しました。多くの問題。また、SQL Server 2000 (ビルド 8.00.2039、または SP4) と IIS/ASP.NET (.Net v2.0.50727) アプリケーションを同じボックスで実行し、TCP/IP 接続を介して相互に接続しています。


主に、スローされる例外は次のとおりです。

System.IndexOutOfRangeException: テーブル 0 が見つかりません。

System.ArgumentException: 列 'password' はテーブル Table に属していません。

[明らかに利用可能なパスワード列があるにもかかわらず、この例外はログイン スクリプトで発生します]

System.InvalidOperationException: このコマンドに関連付けられている開いている DataReader が既に存在します。これを最初に閉じる必要があります。

[これは非常に定期的に発生しています]

System.InvalidOperationException: この SqlTransaction は完了しました。使用できなくなります。

System.ApplicationException: ExecuteReader には、オープンで使用可能な接続が必要です。接続の現在の状態は接続中です。

System.Data.SqlClient.SqlException: タイムアウトが発生しました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。

そして今日、初めて:

System.Web.UI.ViewStateException: 無効なビューステートです。


実稼働サーバーと同じ数の同時ユーザーを使用してアプリの負荷テストを行いましたが、これらのエラーを再現することはできません。それらは非常に断続的であり、8/9/10 のユーザー接続しかない場合でも発生します。私の腸は、ASP.NET - SQL Server 2000 接続の問題を教えてくれます..

この段階では、コード レベルのデータ アクセス レイヤー エラーはほぼ除外されているため (15 人の経験豊富な開発者からなる開発チームがこれに取り組んでいます)、特定の運用サーバー環境の問題であると考えています。

4

3 に答える 3

1

Invalid Viewstate エラーは、トラフィックの多い Web サイトではかなり一般的です。ただし、最近複数の Web サーバーに移動した場合は、すべてのサーバーで Viewstate が同じキーで署名されるように、同じマシン キーを共有していることを確認してください。http://www.codinghorror.com/blog/archives/000132.html

他のエラーに基づいて、複数のスレッドで共有接続を使用していると思います。接続は、静的変数、アプリケーション状態、セッション状態、または複数の要求で使用されるその他のオブジェクトに保存されていますか? おそらく、接続、コマンド、またはトランザクションを含むハッシュテーブルがどこかにあるでしょう。ADO.Net オブジェクトはどれもスレッド セーフではありません。そのため、シングル スレッド方式でのみ使用するようにしてください。

もう 1 つの可能性は、ADO.NET オブジェクトを渡し、それらを一貫して破棄してスコープを管理していないことです。たぶん、それらはリクエストコンテキストなどにキャッシュされていますか?

于 2009-01-12T08:26:09.423 に答える
0

あなたがこれを聞きたくないのはわかっていますが、私が言ったよりも賢い人たちです (信じられない場合は、 McConnell のCode Completeをチェックしてください)。

それはおそらくあなたのコードであり、あなたの直感はおそらく正しいでしょう:

私の腸は、ASP.NET - SQL Server 2000 接続の問題を教えてくれます..

スローされるエラーは非常に具体的であり、文脈上、接続しようとして苦労しているように見えます。これがクライアントの環境でのみ発生する場合は、VM に正しく設定されていない設定を示している可能性があります。 (別のインスタンスで) ホスト マシン上の TCP 接続にアクセスします。


移動前からコードが変更されておらず、以前の環境でこのようなログが有効になっていたことを確認してください。以前に (程度は低いですが) 発生していた可能性がありますが、ロギングを有効にしていないため、環境はそれをキャッチしませんでした。

それが問題ではなく、あなたの投稿を正しく読んでいる場合: パイプと帯域幅でクライアントから提供されたゲスト インスタンスでサーバーを実行していますか? その場合は、おそらく (そのアップグレードとほぼ同時に) ルーティング構成が変更されたか、ファイアウォールが変更されたか、またはインスタンスが置かれているボックスが何らかの変更を加えられ、処理が異なるようになった可能性があります。

自分の環境で再現できず、それが自分のコードではないことを100%確信している場合。論理的には、問題になるのは彼らの環境だけです。

于 2009-01-08T12:44:07.400 に答える
0

更新情報として、問題は VMWare が頻繁に使用されている場合に関連していることが判明しました。なんと楽しい週でしたか。VMWare 環境に合わせてコードを変更しており、すでにいくつかの改善が見られます。

提案をありがとう、私はそれを感謝します。

于 2009-01-16T12:21:03.407 に答える