Asp.net ';服务器端事件';用ASP发送Web Api不到?
我创建了一个测试源,它应该每x时间向客户端发送一条消息。这是Asp.net ';服务器端事件';用ASP发送Web Api不到?,asp.net,angularjs,google-chrome,events,server-side,Asp.net,Angularjs,Google Chrome,Events,Server Side,我创建了一个测试源,它应该每x时间向客户端发送一条消息。这是ApiController: public class TestSourceController : ApiController { private static readonly ConcurrentQueue<StreamWriter> ConnectedClients = new ConcurrentQueue<StreamWriter>(); [AllowAnonymous] [
ApiController
:
public class TestSourceController : ApiController
{
private static readonly ConcurrentQueue<StreamWriter> ConnectedClients = new ConcurrentQueue<StreamWriter>();
[AllowAnonymous]
[Route("api/sources/test")]
public HttpResponseMessage Get()
{
var response = Request.CreateResponse();
response.Content = new PushStreamContent((Action<Stream, HttpContent, TransportContext>) OnStreamAvailable,
"text/event-stream");
return response;
}
private static void OnStreamAvailable(Stream stream, HttpContent headers, TransportContext context)
{
var clientStream = new StreamWriter(stream);
ConnectedClients.Enqueue(clientStream);
}
private static void DoThings()
{
const string outboundMessage = "Test";
foreach (var clientStream in ConnectedClients)
{
clientStream.WriteLine("data:" + JsonConvert.SerializeObject(outboundMessage));
clientStream.Flush();
}
}
}
我猜这是服务器的问题,因为我可以在chrome调试器中看到test
调用中的“EventStream”是空的
有人知道如何确保消息到达客户端吗?解决方案非常简单,根据规范,每一行必须以
“\n”
结尾,最后一行必须以“\n\n”
结尾
因此:
解决它
$scope.handleServerCallback = function (data) {
console.log(data);
$scope.$apply(function() {
$scope.serverData = data;
});
};
$scope.listen = function () {
$scope.eventSource = new window.EventSource("http://localhost:18270/api/sources/test");
$scope.eventSource.onmessage = $scope.handleServerCallback;
$scope.eventSource.onopen = function() { console.log("Opened source"); };
$scope.eventSource.onerror = function (e) { console.error(e); };
};
$scope.listen();
clientStream.WriteLine("data:" + JsonConvert.SerializeObject(outboundMessage) + "\n\n");