好的,如果我正在运行这个简化的代码段,程序会剧烈崩溃,甚至不会抛出异常。
所以这是我之前所做的事情:
所以一切都应该正常工作?假!这让我疯了好几个小时..
using System;
using System.Net;
using System.Text;
public class HttpListenerTest {
public static void Main(string[] args) {
Console.WriteLine("Initialize..");
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://*:8089/");
listener.Prefixes.Add("https://*:8443/");
listener.Start();
while (true) {
Console.WriteLine("Listening..");
HttpListenerContext context = listener.GetContext();
Console.WriteLine("Respond..");
byte[] bytes = Encoding.UTF8.GetBytes("works!");
context.Response.OutputStream.Write(bytes, 0, bytes.Length);
context.Response.OutputStream.Flush();
context.Response.OutputStream.Close();
context.Response.Close();
}
}
}

如果我运行此代码并在端口8089上发出http请求,一切都很好。 8443上的https请求会导致该过程失败,唯一发生的事情就是一个不寻常的事件' ( Screenshot here )在调试模式下。
..用谷歌搜索丢失的文件名,得到4个不相关的结果。
我知道并且真的需要ssl与听众合作。
因此,如果您对此或建议有任何经验,请告诉我。
答案 0 :(得分:1)
如果您需要快速修复localhost(仅适用于localhost)
感谢SushiHangovers评论,将缺少的环境变量'MONO_TLS_PROVIDER'设置为'btls'(BoringSSL)修复了问题。
$ MONO_TLS_PROVIDER=btls mono servertest.exe
如果您需要它在服务器上工作
感谢Gusman,这是一个简短易懂的指南,介绍如何使用Nginx管理SSL并将Http请求发送到Mono服务器。
1。首先安装/设置Nginx
www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-16-04
2. 然后安装Certbot
certbot.eff.org
3. 使用Certbot保护Nginx
www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04
4. :反向代理到您的HttpListener端口(taken from here)
4.1 打开Nginx配置文件
$ sudo nano /etc/nginx/sites-available/default
4.2 注释掉默认的try_files行并指定反向代理设置
. . .
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
# Reverse proxy settings
include proxy_params;
proxy_pass http://localhost:8010;
}
. . .
并改变
server_name _;
到
server_name example.com www.example.com;
现在你应该好好去。