Azure WebApp httplistener
我创建了一个简单的C#控制台应用程序(Net7.0)作为我的多人卡游戏的服务器. 它使用 httplistener 接收连接请求,然后升级到WebSocket连接. // Start listening for websocket requests public async void Start() { HttpListener listener = new(); listener.Prefixes.Add("http://+:80/cardgame/"); listener.Start(); #if DEBUG Console.WriteLine("Listening..."); #endif while (true) { HttpListenerContext listenerContext = await listener.GetContextAsync(); if (
34 2024-04-26
编程技术问答社区
C# HttpListener:存储发布的文件总是比原始文件大两个字节
问题描述: 我的C#程序中有一个HttpListener,该程序带有发布文件(JPG,DOC,ZIP或COLIKE)的发布请求.我正在同一窗户上发送和接收文件. 我从 https://stackoverflow.com/a/8468520/241475 c#/.net),据说只是概念的证明,服务器端的数据上传和存储几乎可以正常工作,除了 始终比原始. 这对于JPG,DOC或单个ZIP文件都不重要 - 我仍然可以打开它们,并且它们显示良好 - 但是当我上传是多数量ZIP一部分的zip文件时,unippipping通常会因一个文件而失败拉链,其余的解压缩. 示例: 在此示例中,您可以看到原始文件(import_filesystem.kmumitkst.z01.ORIGINAL),它是10485760 bytes grine,我将其发布到我的httplistener上,并存储了名为import_filesystem.kmumitkst.z01的版本,即104857
4 2024-04-25
编程技术问答社区
为什么HttpListener的启动方法会在异常时处理掉东西?
httplistener有我真的不了解的东西. 下面的代码不言而喻,并以一种方式暴露了"问题". i仅对每个单个前缀实例化两个不同的httplistener. 然后,我开始第一个侦听器,当然,当我尝试启动第二个(同一前缀)时,我会得到Httplistenerexception. 好的,我的故障(如果我们要通过配置工具,则最终用户故障).没有恐慌,我只会清除第二个听众的前缀并指定新的前缀...或停止第一个侦听器,然后尝试重新启动第二个听众,或者其他任何一个... 但不能做所有这一切,因为一旦我尝试访问第二个侦听器前缀或其他任何内容,我就会得到一个objectDisposedexception(无法访问已丢弃的对象.对象名称:'system.net.httplistener') . 我的问题是为什么? 我在httplistener文档中没有看到任何东西,指出在httplistenerexception上,httplistener对象的某些内部内容是某种程度上处理的,
2 2024-04-24
编程技术问答社区
HttpListener.IsSupported在XP SP3上是假的
我们正在尝试部署一个简单的C#(Framework 2.0)应用程序,该应用程序在Windows XP SP3 System上使用HttpListener类:初始化时的应用程序中止了应用程序,因为HttpListener.IsSupported属性为. 问题:在(合理的)最新XP系统上可以使HttpListener HttpListener什么? 可能重要的事情: 用户不是他的系统管理员 计算机上可能有安全策略,我不知道(我不确定我自己能够在没有自己管理的情况下检查) ) 解决方案 好吧,在引擎盖下HttpListener类呼叫 [StructLayout(LayoutKind.Sequential)] internal struct HTTPAPI_VERSION { internal ushort HttpApiMajorVersion; internal ushort HttpApiMinorVersion; } [DllImp
6 2024-04-23
编程技术问答社区
如何用System.Net.HttpListener在WebSocket中启用SSL?
我正在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 的包装器,因此我
28 2024-04-23
编程技术问答社区
带有JWT和基本认证的HttpListener:如何发送WWW-Authenticate? (Self-Hosted)
我在Mono/.Net上有一个自托管REST应用程序运行跨平台.一个问题是HTTPLISTENER管理并阻止www-painentation头的手动设置.如果您将自己限制在内置的基本,NTLM等身份验证或不需要身份验证的情况下,这很好,但是如果您想接受任何其他类型的令牌. 我正在使用REST样式接口的JWT令牌,使用基本[1] auth进行初始身份验证.在该应用程序的另一部分中,我正在做类似的事情,但是使用自定义令牌和/或基本验证作为API另一部分的后备. 问题: 如何让httplistener发送" www-authenticate:基本"挑战头,同时允许通过非基础授权令牌? 我尝试在听众中同时设置基本和匿名: _listener.AuthenticationSchemes = AuthenticationSchemes.Basic | AuthenticationSchemes.Anonymous; 在任何情况下,这都不会导致www-par
6 2024-04-22
编程技术问答社区
通过POST进行解析
我使用流读取器读取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
22 2024-04-22
编程技术问答社区
C#和后台运行的HttpListener
我创建了简单的HttpListener,它会听到端口9090并根据请求的URL将一些信息写入控制台. 但是我卡住了:(我想到了多线程,基于事件的系统,但我却没有做任何事情. 这是我作为单独的控制台应用启动的听众的代码: string urlTemplate = String.Format("/prefix/{0}/suffix", id); string prefix = String.Format("http://localhost:9090/"); HttpListener listener = new HttpListener(); listener.Prefixes.Add(prefix); listener.Start(); Console.WriteLine("Listening to {0}...", prefix); while (true) { HttpListenerContext context = listener.GetCont
8 2024-04-21
编程技术问答社区
生产准备就绪,多线程的c# http服务器
我在C#.NET中实现了HTTP服务器: public class HttpServer { private HttpListener listener; public HttpServer() { listener = new HttpListener(); listener.Prefixes.Add("http://localhost:8080/"); } public void Start() { lock(this) { listener.Start(); AsyncProcessing(listener); } } public void Stop() { lock (this) { listener.Stop(); }
14 2024-04-21
编程技术问答社区
C#.NET Core 7 HTTP侦听器应用程序包裹在Docker中,无法从Localhost到达
我觉得我在此代码上错过了一些东西.让我通过这个. 在C#中,我正在使用非常简单的代码.没有launchsettings.json,只需硬编码即可查看是否有效.这是设置和主要设置,以便您可以看到所有内容的启动方式: public class Program { public static HttpListener listener; public static string url = "http://localhost:8001/"; ---- later on in main:------ public static void Main(string[] args) { listener = new HttpListener(); listener.Prefixes.Add(url); listener.Start(); Console.WriteLine("Listening for
8 2024-04-21
编程技术问答社区
带有System.net.httplistener(C#)的最大URL长度
我已经在C#中使用System.net.httplistener编写了一个简单的服务器: Listener = new HttpListener(); Listener.Prefixes.Add(Prefix); Listener.Start(); Listener.BeginGetContext(GetContextCallback, null); 我已经注意到,每当我发送的URL(在HTTP GET中)超过255个字符时,我的服务器会返回400(不良请求)HTTP响应.我已经对此进行了一些研究,尽管大多数浏览器和服务器似乎至少处理了〜2000个字符. 有趣的是,我的getContextCallback()甚至在这种方式失败时都不会被调用. 我真的想弄清楚如何配置它以支持大于255个字符,有人知道是否可能吗? 谢谢! 更新:我发现此限制似乎不是在整个URL上,而是在单个目录名称上.我猜这与max_path有关,但我知道其他服务器可以处理此问题,并且我看
16 2024-04-21
编程技术问答社区
C# HttpListener 和 Windows 防火墙
我正在处理的程序之一具有内置的网络服务器,旨在处理非常具体的请求(静态).与TCPLISTENER不同,当启动HTTPLISTENER时,未提示用户允许允许该程序聆听的网络.这引起了一个大问题,因为该程序需要聆听远程连接,而Windows防火墙现在拒绝了远程连接. 如果我在Windows防火墙中制定新规则,然后在"程序和服务"下选择我的程序,Windows仍将拒绝所有远程连接...但是,如果我选择"满足指定条件的所有程序",则它可以正常工作.我的问题是为什么?为什么防火墙专门选择了我的应用程序?以及如何像其他侦听器那样使用防火墙安全屏幕来提示用户? 解决方案 这是因为HTTPLISTENER是在HTTP.SYS顶部构建的,它将在您代表您的程序指定的端口上收听. 我没有找到通过Windows防火墙使用HTTPLISTENER允许使用单个程序的方法,但是您可能只想将入站规则限制为系统组件: 输入键入系统在" tab"程序和服务中的"此程序"字段中 选择协议类型 t
12 2024-04-20
编程技术问答社区
如何用HttpListener使用我的公共IP
我已经有了这个问题... public static HttpListener listener = new HttpListener(); public static string startUpPath = Application.StartupPath; public WebServer() { listener.Start(); listener.Prefixes.Add("http://(here I want my public ip)/"); Thread t = new Thread(new ThreadStart(clientListener)); t.Start(); } 但是,当我初始化课程时,它说"The specified Network format is not valid" 翻译可能不是完美的,因为我的视觉工作室语言是西班牙语. 我的IP看起来像95. //编辑 确切的例外是: " El For
6 2024-04-20
编程技术问答社区
使用.NET HTTPLISTENER时,更改HTTP.SYS内核队列限制?
我有一个应用程序,该应用程序使用.NET 4.0中的HttpListener类用于服务http请求. 在负载下,我注意到我在日志中报告了503 - QueueFull - 错误.搜索此错误表明,当超过队列的最大请求数量时,它会发生. 默认队列长度为1000.如果您使用的是IIS这似乎可以通过应用程序池上高级设置中的"队列长度"参数调谐. 如果您是不是使用IIS是否有任何方法来调整此值?还是此参数的控制隐藏在Httplistener类中,而不是暴露于开发人员? 解决方案 看来, httplistener 不允许直接更改 httpserverqueuelqueelgenth Property 属性.和默认情况下此属性设置为1000 . 但是,您可以尝试在 httplistener 开始之后手动设置它.它是hack,因为它使用 httplistener 的内部属性 requestSqueuehandle ,所以 在您的危险中使用它 . hack: usi
8 2024-04-20
编程技术问答社区
简单网络服务器。指定的网络名称的格式是无效的
我在编写的简单Web服务器上遇到了问题.我需要能够通过Localhost和IP连接到服务器.但是,我在通过IP连接时遇到了问题.这是我的代码: private void start_button_Click(object sender, EventArgs e) { start_button.Text = "Listening..."; HttpListener server = new HttpListener(); server.Prefixes.Add("http://201.0.0.10:69/"); server.Prefixes.Add("http://localhost:69/"); server.Start(); while (true) { HttpListenerContext context = server.
12 2024-04-19
编程技术问答社区
用HttpListener检测客户端断开连接
我有一个使用httplistener的应用程序,我需要知道客户何时断开连接,现在我将所有代码都放在一个try/catch块中,这很丑陋,而不是一个好练习. 我怎么知道客户是否断开连接? 谢谢! 解决方案 简短答案:您不能.如果客户停止讲话,那么下面的插座可能会保持打开状态,并且永远不会关闭;它会超时.检测到这一点的方法是尝试在该连接上执行一个操作,如果连接不再有效,它将根据发生的事情抛出某种例外.如果您异步使用HTTPLISTENER,则可能会在尝试/捕获方面清理一些代码,但不幸的是,这就是您所坚持的.如果客户断开连接,则没有任何事件会发射. 其他解决方案 您可以!我发现的两个选项与 CancellationToken GetClientDisconnectToken(HttpListenerRequest request) 要通过反射实现此目的,我发现HttpListener实际上实现了内置身份验证实现的客户端断开通知.我创建了一种源自Hashtabl
10 2024-04-18
编程技术问答社区
什么原因导致HttpListener HTTP 503错误?
因此,我们有一个大型程序,该程序将HTTPLISTENER用于小型远程管理员功能.由于我不明白的原因,有些人有503错误的问题. 由于我们没有提供错误,因此框架中发生了一些事情.现在,我的问题是,框架内部有什么错误?是前缀未正确设置吗? 我们目前的前缀集为" http://*:8080/". 建议? 解决方案 尝试使用Netsh HTTP命令为HTTPLISTENER设置httplistener的权限时,我在Windows 7上也有相同的错误. 在目标系统上运行命令(对Windows 7有效): netsh http show urlacl 检查,如果您的URL" http://+:8080/"已经显示在保留的URL列表中.尝试从列表中删除(使用" netsh http delete urlaCl".类似的主题在这里. 其他解决方案 我的问题有点晚.但是在下种情况下,我刚刚面对HTTP 503状态代码: 例如,如果有" http:
6 2024-04-18
编程技术问答社区
支持HTTPS的http监听器用c#编码
我找到了很多答案,如何将httplistener设置为使用HTTPS,但是每个解决方案都需要使用命令行.我想那是最快的方法,但我想编写C#类来处理此操作. 在旧解决方案中,我使用了Web服务器类(在Internet上找到的某个地方,我不记得确切的名称),该类别允许以这种方式添加证书: webserver.Certificate = new X509Certificate2("MyCert.pfx", "MyPassword"); 有没有httplistener实现这一目标的方法?显然是从代码中. 问候. 解决方案 您可以加载证书: X509Certificate cert = new X509Certificate2("MyCert.pfx"); 然后安装: X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); store.Open(OpenF
8 2024-04-17
编程技术问答社区
C#: HttpListener在服务内容时出错
我实施了类似于 唯一真正的区别是 string filename = context.Request.RawUrl.Replace("/", "\\").Remove(0,1); string path = Uri.UnescapeDataString(Path.Combine(_baseFolder, filename)); ,我可以穿越子目录.这非常适合网页和其他文本文件类型,但是在尝试提供媒体内容时,我会得到异常 httplistenerexception:i/o 由于 线程出口或应用程序 请求 接着 无效的exception:在写所有字节之前才能关闭流. 在使用语句中. 关于如何处理此问题或停止这些异常的任何建议? 谢谢 解决方案 我应该提到我正在使用Google Chrome进行浏览器(Google Chrome似乎不在乎Mime类型,当它看到音频时,它将尝试像在HTML5播放器中一样使用它),但这也适用于您尝试在页面中托管
10 2024-04-16
编程技术问答社区
当用HttpListener提供文件下载时性能不好
我正在尝试使用C#中的HttpListener创建一个简单的Web服务器,并提供要下载的文件.我看到的非常糟糕的传输速率,尤其是从共享中复制同一文件的转移率.这是HttpListener的已知,可以如何改善它? 以下是有关该问题的研究的一些其他信息.在本地连接时,下载率会有所提高,但是在这种情况下,复制文件几乎立即完成,因此很难测量差异比率.但是,在远程连接时(LAN环境,机器彼此相邻)时,传输时间大约是来自共享的简单文件副本的时间25倍.可用的网络带宽似乎并未用于加快速度. 我发现了一些关于HttpListener的其他问题和讨论,这些问题似乎表明了类似的问题,请参见: httplistener vs本地性能 httplistener绩效优化(这与下载无关) 在我的样本中,我正在启动HttpListener so: HttpListener listener = new HttpListener(); listener.Prefixes.Add(
2 2024-04-16
编程技术问答社区