1

IIS 7 の .Net 4 で Web チャットの開発を開始しました。チャットのメイン ページには 2 つの IFRAME が含まれています。最初のフレームはメッセージの予約に使用され、徐々にロードされます (ユーザーがチャットに接続している間はいつでも、メッセージをロードしてチャットに配信します)。2 番目の iframe は、メッセージの送信に使用します。最初のフレームのロードで 2 番目のフレームをロードできなかったときに問題が発生しましたが、最初のフレームがロードを停止すると、秒はミリ秒単位で実行されます。

  1. 私はすでに試しました:
  2. AJAX を使用してメッセージを送信します。
  3. 1コマ目と2コマ目のスクリプトは別の名前にしてください。それは時々役立ちますが、常にではありません。
  4. ユーザーがチャットのメイン ページを更新するか閉じた後もスクリプトが実行されているかどうかを確認します。
  5. IIS での接続タイムアウトの設定。
  6. ストリーミング応答/テキスト応答を使用します。
  7. 接続キープアライブ/キープアライブ ディレクティブなし。
  8. メインのチャット ページの Iframe タグを入れ替えます。
  9. @import CSS などのさまざまな方法で、チャットのメイン ページに CSS JS ファイルを追加します。
  10. を使用してトレッドを取り外します。

私は解決策を見つけましたが、ドメイン アクセス JavaScript 制限のため、これは多くのドメインを使用するための良い解決策ではないと思います。 iFrame が並行して実行されない

Test.aspx および Test.aspx.cs ページ コードは次のとおりです。

<%@ Page Title="Home Page" Language="C#"  AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="Test._Default" %>

using System;
using System.Web;
using System.Threading;

namespace Test
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        string p = (Request.QueryString["p"] != null)?Request.QueryString["p"]:"";
        if(Request.QueryString["data"] == null)
        {
            Response.Write(@"<html><head></head><body>12<iframe src=""Test.aspx?data="" height=""900px""></iframe><iframe src=""http://localhost/Test"+p+@".aspx?data=""  height=""900px""></iframe></body></html>");   
        }
        else
        {
            System.IO.File.AppendAllText(Server.MapPath(".")+ @"\test.log", DateTime.Now.ToString()+ "\t" + "Data script started\r\n");
            Response.Write(new String(' ', 1024));
            int i=0;
            while (Response.IsClientConnected)
            {
                Response.Write((++i).ToString() + " ");
                Response.Flush();
                Thread.Sleep(1000);
                System.IO.File.AppendAllText(Server.MapPath(".")+ @"\test.log", DateTime.Now.ToString()+ "\t" + "Data script Runned\r\n");

            }
            System.IO.File.AppendAllText(Server.MapPath(".")+ "test.log", DateTime.Now.ToString()+ "\t" + "Data script stoped\r\n");
        }
    }
    }
}
4

1 に答える 1

1

NuGet の SignalR (ベータ) パッケージを検討したことがありますか? この種のアプリケーションを作成するためにカスタム ビルドされており、Node.js と類似しています。この問題を解決するために、このテクノロジーを検討することを強くお勧めします。

これは、git ハブhttps://github.com/SignalR/SignalRとここ Nuget http://nuget.org/packages/SignalRにあります。

于 2012-08-03T22:55:33.073 に答える