Asp.net .Net服务器使用HttpHandler发送的事件无效

Asp.net .Net服务器使用HttpHandler发送的事件无效,asp.net,html,httphandler,server-sent-events,Asp.net,Html,Httphandler,Server Sent Events,我一直在尝试将事件驱动推送到客户端浏览器。我使用ReactiveX从事件生成异步任务,但我甚至无法让我的HttpHandler输出它们的响应 我尝试了一个简单的HttpHandler: public class Handler2 : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/event-stream";

我一直在尝试将事件驱动推送到客户端浏览器。我使用ReactiveX从事件生成异步任务,但我甚至无法让我的HttpHandler输出它们的响应

我尝试了一个简单的HttpHandler:

public class Handler2 : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/event-stream";
        HttpResponse response = context.Response;

        DateTime startdate = DateTime.Now;

        while (startdate.AddMinutes(10) > DateTime.Now)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();

            string responseText = DateTime.Now.TimeOfDay.ToString();

            response.Write(string.Format("data: {0}",js.Serialize(responseText)));
            response.Flush();
            System.Threading.Thread.Sleep(1000);
        }
        response.Close();
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
使用以下客户端代码: 函数初始化(){

我设置错了吗? 就我在其他示例中所看到的情况而言,此代码应按原样工作。请任何人帮助我。我只需要一个简单的SSE控件,可以从服务器端事件触发


提前感谢

我之前已经给出了这个答案,但让我详细说明一下:

查看Google Chrome开发者工具中的“网络”选项卡,可以从您的

根本没有生成SSE-点击网络下的“其他”按钮,您通常可以在这里跟踪SSE数据流

在我的SSE中,我使用了一个简单的HTTPListener,它工作得很好,没有您提到的延迟,并且在使用它时,总是在浏览器之间正确显示


嗨,你还没弄好吗?嗨,查尔斯,我找到了适合我需要的SignalR。我的用户数量有限,因为这将是一个saas网站,所以这是最好的解决方案。好吧,很酷。SignalR很酷,而且总是能工作,但我想如果你只是从服务器到客户端,我认为简单的SSE是一个很好的选择解决方案
        if (window.EventSource == undefined) {
            document.getElementById('targetDiv').innerHTML = "Your browser doesn't support Server Side Events.";
            return;
        }

        var source = new EventSource('Handler2.ashx');

        source.onopen = function (event) {
            document.getElementById('targetDiv').innerHTML += 'Connection Opened.<br>';
        };

        source.onerror = function (event) {
            if (event.eventPhase == EventSource.CLOSED) {
                document.getElementById('targetDiv').innerHTML += 'Connection Closed.<br>';
            }
        };

        source.onmessage = function (event) {
            document.getElementById('targetDiv').innerHTML += event.data + '<br>';
        };
    }
"ws://localhost:50022/ed4b66c7eb394a8789b5f6a631f4ff09/arterySignalR/connect?.."
        res.AddHeader("Content-Type", "text/event-stream")
        res.AddHeader("Cache-Control", "no-cache")
        res.AddHeader("Access-Control-Allow-Origin", "*")
        res.KeepAlive = True