【发布时间】:2015-07-19 19:52:02
【问题描述】:
我创建了一个 Windows 服务,它使用 HttpListener 来响应一些使用 .NET Framework 4.0 的第三方请求。侦听器通过以下方式绑定到 https 前缀:
listener.Prefixes.Add("https://+:" + Properties.Settings.Default.ListeningPort.ToString() + "/");
该服务还通过以下方式在计算机商店中自行注册 https 证书:
X509Certificate2 certificate = new X509Certificate2(Properties.Settings.Default.HttpsCertPath, "", X509KeyStorageFlags.MachineKeySet);
X509Store store = new X509Store(StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
store.Add(certificate);
store.Close();
此外,该服务还使用以下方式在 Http API 中注册证书 - ip:port 绑定:
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "netsh";
psi.Arguments = "http add sslcert ipport=0.0.0.0:" + Properties.Settings.Default.ListeningPort.ToString() + " certhash=" + certificate.Thumbprint + " appid=" + appId;
Process proc = Process.Start(psi);
proc.WaitForExit();
psi.Arguments = "http add sslcert ipport=[::]:" + Properties.Settings.Default.ListeningPort.ToString() + " certhash=" + certificate.Thumbprint + " appid=" + appId;
Process proc = Process.Start(psi);
proc.WaitForExit();
一切正常,正如预期的那样......除了......(这里是邪恶的部分): 在运行了一段时间(一个小时左右)后,listener.GetContext() 不再返回,并且客户端因“连接重置”之类的错误而被丢弃。
【问题讨论】:
标签: c# .net windows ssl httplistener