【发布时间】:2020-07-11 21:06:28
【问题描述】:
如何将桌面客户端订阅到服务器发送的事件。因此,每当从服务器端推送某些内容时,我的 winform 应用程序应该能够捕获并显示该消息。只是在寻找示例代码。我有一些相关的链接。
这里我强调一个示例代码,其中 javascript 端和 ASP.Net MVC 通过服务器发送的事件相互交谈。
<input type="text" id="userid" placeholder="UserID" /><br />
<input type="button" id="ping" value="Ping" />
<script>
var es = new EventSource('/home/message');
es.onmessage = function (e) {
console.log(e.data);
};
es.onerror = function () {
console.log(arguments);
};
$(function () {
$('#ping').on('click', function () {
$.post('/home/ping', {
UserID: $('#userid').val() || 0
});
});
});
</script>
using System;
using System.Collections.Concurrent;
using System.Threading;
using System.Web.Mvc;
using Newtonsoft.Json;
namespace EventSourceTest2.Controllers {
public class PingData {
public int UserID { get; set; }
public DateTime Date { get; set; } = DateTime.Now;
}
public class HomeController : Controller {
public ActionResult Index() {
return View();
}
static ConcurrentQueue<PingData> pings = new ConcurrentQueue<PingData>();
public void Ping(int userID) {
pings.Enqueue(new PingData { UserID = userID });
}
public void Message() {
Response.ContentType = "text/event-stream";
do {
PingData nextPing;
if (pings.TryDequeue(out nextPing)) {
Response.Write("data:" + JsonConvert.SerializeObject(nextPing, Formatting.None) + "\n\n");
}
Response.Flush();
Thread.Sleep(1000);
} while (true);
}
}
}
我想通过服务器发送的事件在 web api 和 winform 之间进行通信。那么请告诉我一个winform如何与服务器发送的事件进行通信?
如果要添加任何小示例....将有很大帮助。谢谢
【问题讨论】:
-
也许你想查看
SignalR(docs.microsoft.com/en-us/aspnet/signalr/overview/…) -
我知道我们可以使用信号器,但我很想知道是否无法从桌面应用程序监听服务器发送事件。
标签: c# winforms server-sent-events