Streaming 具有PushStreamContent的自托管WebApi能否处理多个请求?

Streaming 具有PushStreamContent的自托管WebApi能否处理多个请求?,streaming,asp.net-web-api,self-hosting,Streaming,Asp.net Web Api,Self Hosting,我正在使用HttpSelfHostServer来托管我的WebApi。我返回一个类似这样的内容 public HttpResponseMessage Get(HttpRequestMessage request) { var response = request.CreateResponse(); response.Content = new PushStreamContent(OnStreamAvailable,

我正在使用HttpSelfHostServer来托管我的WebApi。我返回一个类似这样的内容

        public HttpResponseMessage Get(HttpRequestMessage request)
        {
            var response = request.CreateResponse();
            response.Content = new PushStreamContent(OnStreamAvailable, "text/eventstream");
            return response;
        }
            HttpSelfHostConfiguration config = new HttpSelfHostConfiguration(_baseAddress);
            config.TransferMode = System.ServiceModel.TransferMode.Streamed;
            config.MaxConcurrentRequests = 10;
在我向api发出第二个请求之前,一切都按预期进行。第一个请求被阻塞,在我关闭第一个请求之前,第二个请求不会到达Get函数

我已经像这样设置了我的配置

        public HttpResponseMessage Get(HttpRequestMessage request)
        {
            var response = request.CreateResponse();
            response.Content = new PushStreamContent(OnStreamAvailable, "text/eventstream");
            return response;
        }
            HttpSelfHostConfiguration config = new HttpSelfHostConfiguration(_baseAddress);
            config.TransferMode = System.ServiceModel.TransferMode.Streamed;
            config.MaxConcurrentRequests = 10;
为什么第一个呼叫会阻止第二个呼叫

编辑: 这是我的完整控制器:

    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 { }
        }
    }
公共类PushController:ApicController
{
私有静态只读ConcurrentBag _Writers=新ConcurrentBag();
公共HttpResponseMessage获取(HttpRequestMessage请求)
{
var response=request.CreateResponse();
添加(“访问控制允许源代码”、“*”);
添加(“缓存控制”,“无缓存,必须重新验证”);
response.Content=新的PushStreamContent(OnStreamAvailable,“文本/事件流”);
返回响应;
}
私有void OnStreamAvailable(流、HttpContent内容、TransportContext上下文)
{
_Add(新的StreamWriter(stream){AutoFlush=true});
}
公共静态void Say(字符串文本)
{
尝试
{
foreach(变量w in_Writers)
{
w、 写入(“数据:{text:\”“+text+“\”}\n\n”);
}
}
捕获{}
}
}

我不明白为什么自托管WebAPI不能为并发请求提供服务,即将第二个请求分派到单独的线程上


但是。。。我认为你应该总是
Close
stream
PushStreamContent
在你写完所有你要写的东西后给你。您没有添加
内容长度
标题,因此客户端不知道何时停止等待更多数据。关闭输出流将告诉客户端不再有输出流了。

在OnStreamAvailable中您做了什么?我添加了ApicController。您好@ErikZ,您当时找到原因了吗?