Asp.net ';服务器端事件';用ASP发送Web Api不到?

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] [

我创建了一个测试源,它应该每x时间向客户端发送一条消息。这是
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");