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 { }
}
}