Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HTTPS客户端/服务器通信错误:基础连接已关闭:发送时发生意外错误_C#_Ssl_Https - Fatal编程技术网

C# HTTPS客户端/服务器通信错误:基础连接已关闭:发送时发生意外错误

C# HTTPS客户端/服务器通信错误:基础连接已关闭:发送时发生意外错误,c#,ssl,https,C#,Ssl,Https,将XML发送到端口443上的HTTPS侦听器时,我收到以下错误。监听器(C#控制台应用程序)只需使用客户端发送的相同XML(一个简单的win forms应用程序)进行响应。如果我将侦听器应用程序更改为HTTP而不是HTTPS,则应用程序通信良好。理想情况下,此应用程序将在网络上运行。我已经尝试在另一台服务器上托管侦听器应用程序,以便客户端必须访问网络,并将侦听器加载到与客户端相同的机器上。我正在努力消除任何编码问题,这样我就可以把它交给我们的网络人员了,但我觉得他们需要一个方向 内部异常:{“无

将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);
            }
      }
 }
我尝试过这里提到的解决方案:


我还更改了MaxServicePointIdleTime和KeepAlive设置。

代码方面,OP中显示的内容没有问题。问题是在没有签名证书的情况下使用HTTPS。在我创建了一个自签名证书并将其绑定到我使用的端口(端口443)后,应用程序很高兴地接受了HTTPS请求

此处的建议将说明如何逐步纠正此问题: