Tôi có một Dịch vụ .NET Windows để sinh ra một chuỗi về cơ bản chỉ hoạt động như một HttpListener
. Đây là hoạt động tốt trong chế độ đồng bộ ví dụ ...Xử lý nhiều yêu cầu với C# HttpListener
private void CreateLListener()
{
HttpListenerContext context = null;
HttpListener listener = new HttpListener();
bool listen = true;
while(listen)
{
try
{
context = listener.GetContext();
}
catch (...)
{
listen = false;
}
// process request and make response
}
}
Vấn đề bây giờ tôi có là tôi cần điều này để làm việc với nhiều yêu cầu và họ đã trả lời đồng thời hoặc ít nhất là trong một cách chồng chéo.
Để giải thích thêm - ứng dụng khách là ứng dụng trình phát đa phương tiện bắt đầu bằng cách thực hiện yêu cầu cho tệp phương tiện với thuộc tính tiêu đề yêu cầu Range bytes=0-
. Theo như tôi có thể nói nó làm điều này để làm việc ra những gì các phương tiện truyền thông container.
Sau khi đã đọc một đoạn '' (hoặc nếu nó đã đọc đủ để xác định loại phương tiện), sau đó thực hiện một yêu cầu khác (từ một số ổ cắm máy khách khác) với Range bytes=X-Y
. Trong trường hợp này Y là Content-Length được trả về trong phản hồi đầu tiên và X là 250000 byte nhỏ hơn (được phát hiện bằng IIS như là một thử nghiệm). Ở giai đoạn này, nó nhận được 'đoạn cuối' cuối cùng để xem liệu nó có thể nhận được dấu thời gian truyền thông để đo chiều dài hay không.
Sau khi đọc xong, nó thực hiện một yêu cầu khác với Range bytes=0-
(từ một số ổ cắm khác) để bắt đầu truyền trực tuyến tệp phương tiện.
Bất cứ lúc nào, nếu người dùng của khách hàng thực hiện thao tác 'bỏ qua', nó sẽ gửi một yêu cầu khác (từ một số ổ cắm khác) với Range bytes=Z-
trong đó Z là vị trí nhảy vào tệp phương tiện.
Tôi không phải là rất tốt với các công cụ HTTP nhưng theo như tôi có thể nói tôi cần phải sử dụng nhiều chủ đề để xử lý mỗi yêu cầu/phản ứng trong khi cho phép HttpListener
gốc để trở về nghe. Tôi đã thực hiện rất nhiều tìm kiếm nhưng không thể tìm thấy một mô hình có vẻ phù hợp.
EDIT:
Lời cảm ơn và tri ân tới Rick Strahl cho các ví dụ sau đây mà tôi đã có thể thích ứng cho phù hợp với nhu cầu của tôi ...
Add a Web Server to your .NET 2.0 app with a few lines of code
Cách tốt nhất để làm điều đó, nhưng nắm bắt được với chương trình Async sẽ giúp bạn tốt hơn –