0

現在の設定では、2 つのサイト間でミラーリングされたセッションを維持する必要があります。1 つの既存の ASP.NET Web サイトは IIS 6.0 でホストされ、現在は iFrame に新しい Web サイトが含まれており、IIS 7.5 (MVC3) で個別にホストされています。

親セッションを子 Web サイト セッションと一致させる方法について何か提案はありますか?

私が最初に考えたのは、ActionFilter を作成して、OnActionExecuting メソッドで親サイトの種類の HTTPHandler に対して HttpWebRequest を起動することでした。これが特定のセッションをインラインに維持する方法について疑問が提起されました。おそらく、セッション ID に関する知識が不足しているのでしょうか?

何かのようなもの:

public override void  OnActionExecuting(ActionExecutingContext filterContext)
{
    try
    {
        var request = WebRequest.Create(
                      ConfigurationManager.AppSettings["HeartbeatURI"]);
        using (var webResponse = request.GetResponse())
        {
            var response = webResponse as HttpWebResponse;
            if (response != null && response.StatusCode == HttpStatusCode.OK)
            {

ここで何か推奨事項/アドバイスはありますか?ありがとう!

アップデート:

いくつかの役立つ提案の後、ブラウザからの解決策かどうかを調査します。次のようなものです。

function setHeartbeat() {
    setTimeout("heartbeat()", 300000); // every 5 min
}

function heartbeat() {
    $.get(
        "http://soemthing:1234/heartbeathandler.ashx",
        null,
        function(data) {
            setHeartbeat();
        },
        "json"
    );
}

必要に応じて実行します。

4

1 に答える 1

1

コード例で考慮されていない基本的な問題が 2 つあります。

まず、セッションはクライアントごとです。このソリューションは、セカンダリ サーバーからの単一の接続を「ハートビート」しようとします。だからうまくいかない。

第 2 に、セッションには、Cookie または特別な追加の URL 値を介したクライアントの対話が必要です。このソリューションではそれらを取り込もうとしないため、セッションはまったく作成されません。

編集: 3 番目の問題もあります: インプロセス セッションは、何をしても生き続けることが保証されていません。アプリケーションはいつでもリサイクルされる可能性があり、アプリケーションのリサイクルによってインプロセス セッションの値が消去されます。そのため、(両方のサーバーで)セッションが維持されるように、何らかの外部セッション管理システムが必要になります。


しかし、本当に。このようにセッションを維持しようとするのはかなり脆弱です。アプリケーションにとって非常に重要なように思えますが、常に機能するという保証はほとんどありません。セッションを必要としない、またはオンザフライで再構築できるようにアプリケーションを再構築することは、IMO のより良い選択肢です。

于 2012-08-24T11:50:24.667 に答える