Tag: httplistener

HttpListener在Mono上工作得很好吗?

我正在寻找一个小型的Web服务来运行在一个小型的Linux机器上。 我更喜欢用C#编写代码,所以我希望使用Mono。 我不想要运行完整的Web服务器或Mono的ASP.NET版本的开销。 我正在考虑使用一个处理每个客户端连接的线程的单个进程。 线程之间的共享内存而不是数据库。 我已经阅读了微软的HttpListener版本以及它如何与Http.sys驱动程序一起工作。 唉,Mono关于这个类的文档只是自动化的类接口,没有讨论它是如何工作的。 (Linux没有Http.sys,所以我想它的实现方式大不相同。) 有人能指出我讨论这个模块的一些资源吗? 非常感谢Bill,billpg.com (对我感兴趣的问题有一点背景。) 前段时间,我问了这个问题 ,有兴趣与很多来回保持长时间的对话。 我已经决定设计我自己的ad-hoc协议,但我采访过的人真的想要一个REST接口,即使代价是“Okay,立即发送命令”信号。 所以,我想知道在Linux / Mono服务器上运行ASP.NET,但偶然发现了HttpListener。 这似乎是理想的,因为每个“对话”可以在一个单独的线程中运行。 在循环中调用HttpListener的线程可以查找每个进程连接的线程,并将引用传递给该线程。 ASP.NET驱动服务的替代方案是让ASPX代码从数据库中获取状态,并在完成时写回新状态。 是的,它会工作,但这是很多开销。

听取浏览器的请求

使用以下代码: HttpListener listener = new HttpListener(); //listener.Prefixes.Add(“http://*:80/”); listener.Prefixes.Add(“http://*:8080/”); listener.Prefixes.Add(“http://*:8081/”); listener.Prefixes.Add(“http://*:8082/”); listener.Start(); HttpListenerContext context = listener.GetContext(); HttpListenerRequest request = context.Request; 该程序挂起在GetContext(); 尽管在IE和Firefox中加载了http(而不是https)页面。 当我取消注释第一行时,我收到错误: 无法侦听前缀’http:// *:80 /’,因为它与计算机上的现有注册冲突。 那么我该如何收听浏览器的请求呢?

.NET HttpListener Prefix问题与localhost以外的任何问题

我正在尝试使用C#和HttpListener ,其前缀不是localhost,但它失败了(即如果我给它server1 ,即 http://localhost:1234有效,但是 http://server1:1234失败 代码是…… HttpListener listener = new HttpListener(); String prefix = @”http://server1:1234″; listener.Prefixes.Add(prefix); listener.Start(); 失败发生在listener.Start()上,但Access is denied. 。

使用C#HttpListener提供大型文件

我正在尝试使用HttpListener来提供静态文件,这适用于小文件。 当文件大小变大(使用350和600MB文件测试)时,服务器会出现以下exception之一: HttpListenerException : 由于线程退出或应用程序请求 , I / O操作已中止 ,或者: HttpListenerException : 信号量超时期限已过期 。 什么需要改变以摆脱exception,让它运行稳定/可靠(和快速)? 这里有一些进一步的阐述:这基本上是对这个早期问题的后续问题 。 稍微扩展代码以显示效果。 内容写入是一个循环(希望是合理的)块大小,在我的情况下是64kB,但是改变值除了速度之外没有区别(参见上面提到的旧问题)。 using( FileStream fs = File.OpenRead( @”C:\test\largefile.exe” ) ) { //response is HttpListenerContext.Response… response.ContentLength64 = fs.Length; response.SendChunked = false; response.ContentType = System.Net.Mime.MediaTypeNames.Application.Octet; response.AddHeader( “Content-disposition”, “attachment; filename=largefile.EXE” ); byte[] buffer = new byte[ 64 * 1024 ]; int […]

如何在C#中的随机端口上创建HttpListener类?

我想创建一个在内部提供Web页面的应用程序,并且可以在同一台机器上的多个实例中运行。 为此,我想创建一个侦听端口的HttpListener : 随机选择 目前尚未使用 基本上,我想要的是: mListener = new HttpListener(); mListener.Prefixes.Add(“http://*:0/”); mListener.Start(); selectedPort = mListener.Port; 我怎么能做到这一点?

Httplistener和文件上传

我正在尝试从我的网络服务器检索上传的文件。 当客户端通过webform(随机文件)发送文件时,我需要解析请求以获取文件并进一步处理它。 基本上,代码如下: HttpListenerContext context = listener.GetContext(); HttpListenerRequest request = context.Request; StreamReader r = new StreamReader(request.InputStream, System.Text.Encoding.Default); // this is the retrieved file from streamreader string file = null; while ((line = r.ReadLine()) != null){ // i read the stream till i retrieve the filename // get the file data out and break the loop […]

使用.Net HttpListener进行multithreading处理

我有一个听众: listener = new HttpListener(); listener.Prefixes.Add(@”http://+:8077/”); listener.Start(); listenerThread = new Thread(HandleRequests); listenerThread.Start(); 我正在处理请求: private void HandleRequests() { while (listener.IsListening) { var context = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener); context.AsyncWaitHandle.WaitOne(); } } private void ListenerCallback(IAsyncResult ar) { var listener = ar.AsyncState as HttpListener; var context = listener.EndGetContext(ar); //do some stuff } 我想以这样的方式写出void Stop() : 它将阻塞,直到所有当前处理的请求结束(即等待所有线程“执行某些操作”)。 虽然它将等待已经启动的请求,但它将不允许任何更多的请求(即在ListenerCallback的开头返回)。 之后它将调用listener.Stop() ( […]

使用C#HttpListener处理多个请求

我有一个.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=XY发出另一个请求(来自不同的客户端套接字号)。 在这种情况下,Y是第一个响应中返回的Content-Length,X比该值小250000个字节(使用IIS作为测试发现)。 在这个阶段,它正在获得最后一个“块”,看它是否可以获得媒体时间戳来衡量长度。 读完之后,它会使用Range bytes=0- […]