2008-09-08 19 views
1

これは、App_Codeフォルダにコードがあり、ハードウェアロードバランサを使用するすべての人にとっては疑問です。真のハードウェアロードバランサは、問題を解決するために固定セッションに設定できますが、完璧な世界では、この機能をオフにしたいと思います。ASP.NET AJAXロードバランシングの問題

ファイルがApp_Codeフォルダ内にあり、サイトがプリコンパイルされていない場合、iisはこれらのファイルのランダムなファイル名を生成します。

server1 "/ajax/SomeControl, App_Code.tjazq3hb.ashx" 
server2 "/ajax/SomeControl, App_Code.wzp3akyu.ashx" 

ユーザーがページを投稿し、他のサーバーに転送されたときに何も動作しません。

誰にでも解決策がありますか?私は、事前にコンパイルされたWebサイトに変更することができますが、QA部門が変更されたファイルを宣伝する能力を失うことになります。

答えて

0

QA部門がそのライブラリ全体を宣伝できる場合は、app_codeにあるものを外部クラスライブラリに移動することができます。私はあなたがプレコンパイルされたサイトに切り替えるための便利で寛容な方法を見つけることができない場合、あなたは固執したセッションに立ち往生していると思います。

+0

固定セッションを有効にせずにこの問題を解決した唯一の方法です。 –

1

ロードバランサはスティッキセッションをサポートしていますか?これをオンにすると、バランサは特定の時間枠内で同じIPを同じサーバに何度も何度もルーティングします。このようにして、1つのクライアントからのすべての要求(AJAXなど)は、常にクラスタ/ファーム内の同じサーバーに到達します。

+0

真のハードウェアロードバランサは、問題を解決するために固定セッションに設定できますが、完璧な世界では機能を無効にしたいと思います。 –

0

ハードウェアロードバランサの場合は、要求されたページをコンパイルして配信する要求URLがあるため、問題は発生しません。

唯一の問題は、セッションとビューの状態があると考えることができることです。

0

真のハードウェアロードバランサは問題を解決するために固定セッションに設定できますが、完璧な世界ではこの機能をオフにしたいと思います。

2

両方のサーバーのマシンキー>ノードが同じ値に設定されていますか。

web.configのmachine.configファイルをオーバーライドして設定することができます。これはそうしなければ、このような奇妙な状況に遭遇する可能性があります。

+0

のように見えるのはViewStateにのみ影響します –

0

これはViewStateの暗号化のみに使用されているようです。自動コンパイルされたアセンブリのファイル名には影響しません。

0

私はasp.netモデルが暗号化とマシン固有のストレージにかなり依存していると思いますので、セッション用の固定IPを避けるように働くかどうかはわかりません。

ASP.NET AJAX(私はMonoRail NJSのアプローチを代わりに使用します)については分かりませんが、セッション状態が問題になる可能性があります。

セッション状態がシリアル化可能であることを確認し、InMemoryセッションを使用しないようにする必要があります。おそらくASP.NETセッションステートサーバーを実行して、フロントエンドファーム全体が同じセッション記憶域を使用していることを確認する必要があります。このような場合、セッションは完全にシリアライズ可能でなければなりません(なぜ、セッション内のオブジェクトが優先されないのか、常にIDを使用する必要があります)。

1

... MachineKeyのことは本当です。それはすべてのロードバランスされたマシンで同じに設定する必要があります。私はそれが影響を与えるすべてを覚えていませんが、とにかくそれを行います。

次に、サイトをプリコンパイルします。ページが再コンパイルされたときに.csファイルが存在するときは常に、新しいバージョンを引き出すことができます。難しいのは、app_codeファイルが単一のdllにコンパイルされることです。ただし、そこに変更が加えられた場合は、新しいdllをアップロードすることができます。

さらに簡単にするには、「固定命名と単一ページアセンブリを使用する」オプションを有効にします。これにより、各コンパイルで同じ名前が付いていることが確認されます。そのため、変更された.dllファイルをテストして置き換えるだけです。

すべてのことは、あなたは問題があるべきではないと言いました。要求はIISに送られます。IISはページを提供し、必要に応じてコンパイルします。コードの背後にあるマシンごとに異なる場合は、コードは同じで、マシンはそれ自身のコードを参照します。実際のリクエスト/ポストバックはそのことを知らないか、気にしません。私が上で言ったことはすべて物事を簡素化するのに役立つはずですが、とにかくそれが働くはずです...それはたぶんマシンキーの問題です。