【问题标题】:Changing EventSouce event name not working in asp.net更改 EventSouce 事件名称在 asp.net 中不起作用
【发布时间】:2015-06-04 15:15:36
【问题描述】:

我有一个asp.net mvc 应用程序knockout.js

我正在使用HTML5 EventSource 推送消息

c#

 private static void UpdateOnlineUsers()
    {
        var ou = Clients.Select(c => new { UserName = c.User.Name, Time = c.DateTime.ToString("G") }).ToList();
        Clients.ForEach(c =>
        {
            c.Stream.WriteLine("data:" + new JavaScriptSerializer().Serialize(ou) + "\n\n");
        });
    }

而 javascript 是

eventSource.addEventListener('message', function (e) {
        if (e.data.length) {
            var json = JSON.parse(e.data);
            if (json.Text) {
                messages.push(json);
            }
            else onlineUsers(json);
        }
    }, false);  

工作很好。

但我想为事件添加一个特定名称,所以我在 c# 方法中添加了新行,例如

Clients.ForEach(c =>
        {
            c.Stream.WriteLine("event: messenger \n");  // added new
            c.Stream.WriteLine("data:" + new JavaScriptSerializer().Serialize(ou) + "\n\n");
        });

并将脚本更改为

eventSource.addEventListener('messenger',...`

添加事件名称后它停止工作

请帮忙!

谢谢。

【问题讨论】:

    标签: javascript c# asp.net-mvc knockout.js server-sent-events


    【解决方案1】:

    如果您删除事件名称和“\n”之间的空格,它看起来就像这样:

     Clients.ForEach(c =>
        {
            c.Stream.WriteLine("event: messenger\n");  // added new w/o space
            c.Stream.WriteLine("data:" + new JavaScriptSerializer().Serialize(ou) + "\n\n");
        });
    

    【讨论】:

    • 很好。我最终添加了client.Stream.WriteLine("event:messenger\ndata:" + new JavaScriptSerializer().Serialize(ou) + "\n");,它正在工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-08-20
    • 2018-07-07
    • 2017-04-10
    • 2012-12-10
    • 2017-06-26
    • 2014-06-16
    • 1970-01-01
    • 2022-07-15
    相关资源
    最近更新 更多