【发布时间】:2023-03-06 21:57:02
【问题描述】:
我正在努力实现服务器站点事件以将数据流式传输回使用 HTML 和 JavaScript 构建的 WebApplication(通过使用 EventSource)。
我在我的系统中所做的是,客户端系统(C# 控制台应用程序)将数据永久发送到 /getNotification?action=addEventChange&message="some text" 并在接收到 该消息我想触发一个事件,该事件应将数据发送回我的浏览器应用程序,该应用程序在 /getNotification?action=readEventChange 注册了 EventSource。
事件处理工作正常,但我发现 Respons 对象在我的回调函数 (CB()) 中不可用,我进一步调用了 sendIncommingEvent()。
我遇到了一个异常,例如“响应在此上下文中不可用”。
如何使响应对象在我的回调中也可用? 在注册事件处理程序后,我发现了一个混乱的解决方法进入无限循环(如果我在哪里执行 while(true) 循环,请查看 else。)
这有时很好用,有时却让我的 IIS 崩溃?!
所以请大家帮我解决我的问题。
非常感谢。
迪特干杯
您可以在下面找到一个示例,即从网络表单中从我的 cs 函数中截取的代码。
namespace xxxx
{
public partial class getNotification : System.Web.UI.Page
{
private static event EventHandler myHandler;
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["action"] == "addEventChange")
{
string sMsg = Request.QueryString["message"];
commonAESStuff.addEventChange(sMsg);
fireEvent(EventArgs.Empty);
}
else if (Request.QueryString["action"] == "readEventChange")
{
myHandler += CB;
while (true)
{
System.Threading.Thread.Sleep(1000);
}
}
public void sendIncommingEvent(string s)
{
try
{
Response.ContentType = "text/event-stream";
Response.Write("data:" + s.ToString() + "\n\n");
Response.Flush();
}
catch (Exception ex)
{
}
}
private void CB(object sender, EventArgs e)
{
string s = commonAESStuff.getEventChanges();
sendIncommingEvent(s);
}
protected virtual void fireEvent(EventArgs e)
{
EventHandler handler = myHandler;
if (handler != null)
{
handler(this, e);
}
}
}
}
【问题讨论】:
标签: c# asp.net webforms server-sent-events