2

WebApiをホストするためにHttpSelfHostServerを使用しています。このようなPushStreamContentを返します

        public HttpResponseMessage Get(HttpRequestMessage request)
        {
            var response = request.CreateResponse();
            response.Content = new PushStreamContent(OnStreamAvailable, "text/eventstream");
            return response;
        }

APIに2回目のリクエストを行うまで、すべてが期待どおりに機能しています。最初のリクエストはブロックされており、最初のリクエストを閉じるまで、2番目のリクエストはGet関数に到達しません。

私はこのように構成をセットアップしました

            HttpSelfHostConfiguration config = new HttpSelfHostConfiguration(_baseAddress);
            config.TransferMode = System.ServiceModel.TransferMode.Streamed;
            config.MaxConcurrentRequests = 10;

最初の呼び出しが2番目の呼び出しをブロックするのはなぜですか?

編集:これが私の完全なコントローラーです:

    public class PushController : ApiController
    {
        private static readonly ConcurrentBag<StreamWriter> _Writers = new ConcurrentBag<StreamWriter>();


        public HttpResponseMessage Get(HttpRequestMessage request)
        {
            var response = request.CreateResponse();
            response.Headers.Add("Access-Control-Allow-Origin", "*");
            response.Headers.Add("Cache-Control", "no-cache, must-revalidate");
            response.Content = new PushStreamContent(OnStreamAvailable, "text/event-stream");
            return response;
        }

        private void OnStreamAvailable(Stream stream, HttpContent content, TransportContext context)
        {
            _Writers.Add(new StreamWriter(stream) { AutoFlush = true });
        }

        public static void Say(string text)
        {
            try
            {
                foreach (var w in _Writers)
                {
                    w.Write("data:{ text : \"" + text + "\" }\n\n");
                }
            }
            catch { }
        }
    }
4

1 に答える 1