HTTPS客户端/服务器通信错误:基础连接已关闭:发送时发生意外错误
本文关键字:错误 意外 客户端 服务器 通信 HTTPS 连接 | 更新日期: 2023-09-27 18:25:58
当将XML发送到端口443上的HTTPS侦听器时,我收到以下错误。侦听器(C#控制台应用程序)只需使用客户端发送的相同XML(一个简单的win-forms应用程序)进行响应。如果我将侦听器应用程序更改为HTTP而不是HTTPS,则应用程序通信良好。理想情况下,此应用程序将在网络上运行。我尝试过在另一台服务器上托管侦听器应用程序,以便客户端必须接入网络,并在与客户端相同的计算机上加载侦听器。我正在努力消除任何编码问题,这样我就可以把它交给我们的网络人员,但我觉得他们需要一个方向。
内部异常:{"无法从传输连接读取数据:远程主机强制关闭了现有连接。"}
这是客户的代码:
xmlOutBox.Text = "";
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
ServicePointManager.MaxServicePointIdleTime = 1;
System.Net.WebRequest req = null;
System.Net.WebResponse rsp = null;
try
{
string uri = urlBox.Text;
req = System.Net.HttpWebRequest.Create(uri);
((HttpWebRequest)req).KeepAlive = false;
req.Method = "POST";
req.ContentType = "text/xml";
System.IO.StreamWriter writer =
new System.IO.StreamWriter(req.GetRequestStream());
writer.WriteLine(xmlInBox.Text);
writer.Close();
using (var response = (HttpWebResponse)req.GetResponse())
{
var respon = response.GetResponseStream();
using (var reader = new System.IO.StreamReader(respon, Encoding.UTF8))
{
string responseText = reader.ReadToEnd();
xmlOutBox.Text = responseText;
}
}
}
以下是侦听器代码:
static void Main(string[] args)
{
HttpListener listener = new HttpListener();
listener.Prefixes.Add("https://*:443/");
listener.Start();
Console.WriteLine("Listening...");
for(;;)
{
HttpListenerContext ctx = listener.GetContext();
new Thread(new Worker(ctx).ProcessRequest).Start();
}
}
class Worker
{
private HttpListenerContext context;
public Worker(HttpListenerContext context)
{
this.context = context;
}
public void ProcessRequest()
{
string text;
using (var reader = new StreamReader(context.Request.InputStream, context.Request.ContentEncoding))
{
text = reader.ReadToEnd();
Console.WriteLine(text);
}
}
}
我已经尝试了这里提到的解决方案:C#System.Net.WebException:基础连接已关闭:发送时发生意外错误
我还更改了MaxServicePointIdleTime和KeepAlive设置。
代码方面,OP中显示的内容没有错。问题是在没有签名证书的情况下使用HTTPS。在我创建了一个自签名证书并将其绑定到我正在使用的端口(端口443)后,应用程序很乐意接受HTTPS请求。
这里的建议将展示如何逐步纠正问题:
https://stackoverflow.com/questions/11403333/httplistener-with-https-support#=