我在C#中编写HTTP服务器. 当我尝试执行函数HttpListener.Start()时,我会得到HttpListenerException说 "访问被拒绝". 当我在Windows 7中以管理模式运行应用程序时,它可以正常工作. 我可以在没有管理模式的情况下运行它吗?如果是的话? 如果不是,我该如何开始运行后将应用更改为管理模式? using System; using System.Net; namespace ConsoleApplication1 { class Program { private HttpListener httpListener = null; static void Main(string[] args) { Program p = new Program(); p.Server(); }
以下是关于 httplistener 的编程技术问答
我的应用程序使用一个小的Web服务器来填写某些文件,并具有远程管理的Web界面.目前,用户必须使用NetSh像So 一样注册URI netsh http add urlacl url=http://+:1233/ user=Chris-PC\Chris 这对普通用户来说这不是一个乐趣.我希望该程序能够在我的程序中从我的程序中指定的任何端口上侦听任何端口,而无需最终用户使用命令提示符.无论如何,是否可以实现仅使用process.start和运行命令提示自己的工作? 解决方案 我写这本书是为了提升perms并通过 netsh 添加HTTP ACL条目. 用户将被提示将更改最高的系统更改,但总比没有好.您可能需要为此响应 adverseAccessDeniedException public static class NetAclChecker { public static void AddAddress(string address) {
我正在Windows Azure(一个工作角色)上使用.NET 4.5和HTTPLISTENER类来制作我自己的WebSocket服务器.对于HTTP非安全连接,它运行良好.问题在于,我需要使SSL(WSS://)确定的WebSocket连接. 我一直在寻找,httplistener class文档和互联网都没有对我有很大帮助. 我发现httpcfg.exe应该帮助我配置证书,但没有幸运. 所以,这是我的问题: 有什么方法可以从我的代码中启用它?像从商店中阅读证书并以某种方式将其设置在Httplistener上? 如果不是,httpcfg.exe是解决方案吗?如果是,如何使用它? 如果1 == no and 2 ==是的,我如何在Azure中使用httpcfg? 谢谢!我非常感谢您的帮助... 最好的问候... gutemberg 解决方案 好吧,刚刚发现. 由于 httplistener 是 http.sys 的包装器,因此我
我构建了一个简单的Web服务,该服务仅使用HTTPLISTENER接收和发送请求.有时,服务失败的情况是"指定的网络名称不再可用".当我写入httplistenersponse的输出缓冲区时,它似乎是被抛弃的. 这是错误: listererCallback()错误:指定的网络名称不再可用system.net.httpresponsestream.write(byte [] buffer,int32 offset,int32 size) 这是代码的有罪部分.响应是发送回客户的数据: buffer = System.Text.Encoding.UTF8.GetBytes(responseString); response.ContentLength64 = buffer.Length; output = response.OutputStream; output.Write(buffer, 0, buffer.Length); 似乎并不总是是一个巨大的缓冲区,两
我将HTTPLISTENER用作简单的HTTP服务器.我一直通过让HTTPLISTENER将字符串" OK"返回每个请求来基准测试REQ/SEC性能 - 这已以每秒16,000请求达到限制.根据以下代码,我可以做些什么以进一步优化性能?还是我们达到了Windows http.sys的限制? 图像上传不起作用,这是视觉工作室性能跟踪的链接: vs性能跟踪 Public Class HTTPServer Shared Listener As HttpListener = New HttpListener Public Shared Sub Start() ServicePointManager.DefaultConnectionLimit = 500 ServicePointManager.Expect100Continue = False ServicePointManager.MaxServicePo
我正在尝试从网络服务器检索上传的文件.当客户端通过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 dat
我正在尝试将HTTPS支持添加到我的简单单声道HTTP服务器中.它在大多数情况下都可以正常工作,但是当发生SSL异常时,应用程序会崩溃,例如客户端取消握手.显然,这样的事情不应该完全崩溃,所以我需要以某种方式捕获该例外. 代码: static void Main(string[] args) { try { var listener = new HttpListener(); string prefix = "https://*:8443/"; listener.Prefixes.Add(prefix); Console.WriteLine("Starting HTTP server at " + prefix); listener.Start(); while (true)
我已经使用httplistener创建了服务器.它在没有SSL的情况下工作得很完美,但是有了SSL,发生了一些奇怪的事情. 我已经使用httpcfg安装了证书,即使在我自己的程序中,它也可以正确安装,侦听器启动并提供HTTPS请求,但始终要求提供客户端证书. 它不会在Windows/.NET上发生,只有Linux/Mono(我使用的是Ver 3.4.0),非常烦人,我不希望每次尝试登录用户对于客户证书. 这是一个单声道错误还是有任何方法可以禁用客户证书谈判? 谢谢. 解决方案 我遇到了同样的问题.我发现的是,这是在单声道中进行的.在我遇到此pr 试图将此硬编码值更改为false但是,由于"我宁愿不更改另一个硬编码值的硬编码值",因此目前被半拒绝了. [update]和我现在刚刚意识到 you (op)是pr:) 的作者 [更新9/21/2016]看起来这个问题仍在获得命中.如果这对任何人有帮助,那么很久以前,当我们无法解决这个问题时,我们将其作为
我有一个使用单声道构建的.NET应用程序,我将使用mkbundle捆绑到本机(linux)可执行文件中.这样一来,最终用户就不需要弄乱并安装单声道. 应用程序使用ServiceStack,在引擎盖下使用HttpListener.我需要在启用SSL的HTTP端点上公开Web服务. 通常,您将在配置过程中运行类似httpcfg -add -port 1234 -p12 MyCert.pfx -pwd "MyPass"(实际上都是将证书复制到特定路径),并且HttpListener将自动将证书绑定到端口. so HttpListener在运行时加载来自特定路径的证书. 那条路径是硬编码的吗?还是有某种方法可以告诉它可以从另一个位置使用证书,因为最终用户不会安装单声道? 解决方案 是的,HttpListener期望找到证书的路径是预定义的,并且用户无法通过程序或通过配置文件指定.单声道EndPointListener类将寻找路径: ~/.config/.mo
如果我有一个RAW HTTP响应作为字符串: HTTP/1.1 200 OK Date: Tue, 11 May 2010 07:28:30 GMT Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=UTF-8 Server: gws X-XSS-Protection: 1; mode=block Connection: close ... 我可以简单地将其解析为HttpListenerResponse对象吗?或至少某种类型的.NET对象,因此我不必处理原始响应. 我目前正在做的是提取标头键/值对,然后将它们设置在HttpListenerResponse上.但是某些标头无法设置,然后我必须切出响应的主体并将其写入OutputStream.但是身体可能会被弄脏,也可能是我无法工作的图
我的公司正在尝试使用.NET FX 3.5和C#编写代理服务器.来自我们的研究我已经读过httplistener不是虽然我不确定为什么是代理服务器的好候选人. 我们目前正在与 Chintsisis Proxy示例源代码除其他外,还实施我们自己的登录和性能计数器.使用httplistener将包裹http.sys,这将为我们提供一些我们需要的性能统计信息. 那么,为什么httplistener是HTTP代理工作的不良候选人? (是的,我们也通过编写或配置ICAP服务器来考虑Squid 3.1.) 解决方案 httplistener在.NET中为A Simple HTTP服务器提供一个主要的构建块.简单的其中包括不支持高运营率. 通常,HTTP代理需要非常低的开销,以支持许多并发连接并提供代理的功能(这取决于代理类型). 代理在),这立即提供了一个(如果我正确理解httplistener)是不可能的: 代理服务器必须与其连接到的客户端(或其他代理服
这两个前缀在HttpListener方面有什么区别? http://+:8080/ http://*:8080/ 解决方案 http://*:8080/:接收端口8080上的所有HTTP请求,这些请求 已经由其他HttpListener处理. http://+:8080/:如果已经由另一个HttpListener处理,请在端口8080 上接收所有HTTP请求. 其他解决方案 除了 @paulpro的好答案外, link @rownage发表(请参阅此答案)提供了有关差异的更多信息: 强的通配符(加号 +) 当urlprefix的主机元素由单个加号组成 (+),urlprefix在上下文中匹配所有可能的主机名 它的方案,港口和相对元素,并属于强大 通配符类别. 当申请需要服务时,强大的通配符很有用 指向一个或多个相对尿液的请求,不管如何 这些请求到达机器或他们指定的网站 他们的主机标题.在这种情况下使用强的通配符避免 需要指定主机和/或IP地址
我使用流读取器读取context.Request.InputStream到末端,最终以 的字符串形式读取 "Gamestart=true&GamePlayer=8&CurrentDay=Monday&..." 在C#控制台中解析的最效率/"清洁"方式是什么? 解决方案 您可以使用 HttpUtility.ParseQueryString 很少的样本: string queryString = "Gamestart=true&GamePlayer=8&CurrentDay=Monday"; //Hardcoded just for example NameValueCollection qscoll = HttpUtility.ParseQueryString(querystring); foreach (String k in qscoll.AllKeys) { //Prints result in output window. System
我正在研究一个将接收包含XML数据的HTTP帖子的项目.我将设置HTTPLISTENER以接收HTTP帖子,然后用ACK响应. 我想知道是否有任何实施类似功能的示例? Httplistener可以同时处理多少个请求? 我将有一个消息队列来存储客户端的请求.我将必须设置一个测试客户端,以将请求发送到HTTPLISTENER以进行测试.我应该设置一个WebRequest或其他测试httplistener的东西吗? 解决方案 您可以使用HTTPLISTENER来处理传入的HTTP帖子,您几乎可以遵循为侦听器找到的任何教程.这是我这样做的方式(请注意这是综合的,一次处理多个请求,您将需要使用线程或至少使用异步方法.) public void RunServer() { var prefix = "http://*:4333/"; HttpListener listener = new HttpListener(); listener.Prefix
假设我有httplistener.它会听一些端口和IP.当我发送发布请求时,它会抓住它.如何从httplistenerrequest解析帖子参数? HttpListenerContext context = listener.GetContext(); HttpListenerRequest request = context.Request; if ( request.HttpMethod == "POST" ) { // Here i can read all parameters in string but how to parse each one i don't know } 解决方案 使用您选择与. 编码邮政数据编码的任何机制,对帖子正文(从httplistenerrequest上的输入流读取). 例如,您可以使用JSON.STRINGIFY调用在浏览器中的JavaS
我在这里与httplistener一起在这里面临问题. 表格的请求 http://user:password@example.com/ 是制造的,如何获取用户和密码? httpwebrequest具有凭据属性,但是httplistenerrequest没有它,我在任何属性中都没有找到用户名. 感谢您的帮助. 解决方案 您正在尝试通过HTTP Basic Auth通过凭据,我不确定是否在HTTPLISTENER中支持userName:密码语法,但是如果是,则需要指定您的首先接受基本验证. HttpListener listener = new HttpListener(); listener.Prefixes.Add(uriPrefix); listener.AuthenticationSchemes = AuthenticationSchemes.Basic; listener.Start(); 收到请求后,您可以使用: 提取用户名和密码 Ht
我正在研究一个具有HttpListener的应用程序.我的目标是让用户在选择时关闭听众.我把听众放在一个新线程中,并且在流产该线程时遇到了问题.我在某个地方读到,如果您试图在不受管理的上下文中流产一个线程,那么一旦重新输入托管上下文,就会触发ThreadAbortException.看来,httplistener的GetContext()方法是无法管理的,因为当我尝试中止线程时,直到我针对应用程序提出Web请求时,任何事情都不会发生.然后线程退出.问题是当我试图杀死线程时,我可能会在稍后在同一端口上再次启动该线程,而HttpListenerException则说明前缀已注册. 如何杀死跨线httplistener?是否有GetContext()的托管替代方案可以使线程中止?我可以以不受管理的代码停止的方式中止线程吗? 解决方案 呢: public class XListener { HttpListener listener; public XLis
我有一个听众: 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)