【发布时间】:2012-02-20 12:38:05
【问题描述】:
我有一个 .NET Windows 服务,它产生一个基本上只是充当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
}
}
我现在遇到的问题是我需要它来处理多个请求并让它们同时响应或至少以重叠的方式响应。
进一步解释 - 客户端是一个媒体播放器应用程序,它首先通过请求标头属性Range bytes=0- 请求媒体文件。据我所知,它这样做是为了弄清楚媒体容器是什么。
在它读取一个“块”(或者如果它已经读取到足以确定媒体类型)之后,它会发出另一个请求(来自不同的客户端套接字号)Range bytes=X-Y。在这种情况下,Y 是第一个响应中返回的 Content-Length,X 比它少 250000 字节(使用 IIS 作为测试发现)。在这个阶段,它正在获取最后一个“块”,看看它是否可以获得媒体时间戳来测量长度。
读完之后,它会向Range bytes=0-(来自另一个套接字号)发出另一个请求,以开始正确地流式传输媒体文件。
但在任何时候,如果客户端的用户执行“跳过”操作,它会发送另一个请求(来自另一个套接字号)Range bytes=Z-,其中 Z 是在媒体文件中跳转到的位置。
我对 HTTP 的东西不是很好,但据我所知,我需要使用多个线程来处理每个请求/响应,同时允许原始 HttpListener 返回监听。我做了很多搜索,但找不到合适的模型。
编辑:
感谢 Rick Strahl 提供的以下示例,我能够根据自己的需要进行调整...
Add a Web Server to your .NET 2.0 app with a few lines of code
【问题讨论】:
标签: c# httplistener