내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
고객이 원래의 HTTP 백엔드 서비스를 https를 지원하는 서비스로 업그레이드해야 하기 때문에, 원래의 HTTP 서비스는 WINDOWS 서비스에 내장된 HTTP Listening 서비스를 기반으로 구현되고 https를 지원하지도 않고 다른 서비스와도 다르기 때문입니다. IIS에 배포된 WebAPI는 서비스와 마찬가지로 직접 로드되므로 여기서는 다음과 같이 https를 지원하고 서버 환경에서 HTTPS 포트 바인딩 설정을 수행하도록 원래 서비스를 수정해야 합니다.
(참고: 다음 작업을 수행하려면 이미 HTTPS 인증서가 있어야 합니다.)
1. 인증서를 설치하고 pfx 파일을 두 번 클릭한 후 다음 위치에 설치합니다.로컬 컴퓨터”–>“개인의”;
2. 두 번 클릭하여 엽니다.크립트인증서, 세부 정보에서 (certhash) 지문 관련 정보를 볼 수 있습니다.
3. 포트 바인딩 수행(기본 포트 443)
netsh http add sslcert ipport=0.0.0.0:8080 certhash=指纹 appid={程序GUID/newguid} clientcertnegotiation=enable
4. 서버 프로그램 구현:
- using System;
- public class HttpService
- {
- public MyHttpServer()
- {
- System.Net.HttpListener httpListener = new System.Net.HttpListener();
- httpListener.AuthenticationSchemes = System.Net.AuthenticationSchemes.Anonymous;
- httpListener.Prefixes.Add("https://*:8000/"); // 支持https
- httpListener.Start();
- new System.Threading.Thread(new System.Threading.ThreadStart(delegate
- {
- while (true)
- {
- try
- {
- System.Net.HttpListenerContext httpListenerContext = httpListener.GetContext();
- new System.Threading.Thread(new System.Threading.ParameterizedThreadStart((input) =>
- {
- System.Net.HttpListenerContext ctx = (System.Net.HttpListenerContext)input;
- System.Net.HttpListenerRequest request = ctx.Request;
- string pram = request.QueryString["Data"];//Get入参
- string responseMessage = string.Empty;//返回值
- if (!string.IsNullOrEmpty(pram))
- {
- //Get入参
- pramOrg = pram;
- pram = System.Web.HttpUtility.UrlDecode(pram);
- }
- //POST入参
- if (request.HttpMethod == "POST")
- {
- //处理业务请求
- StreamReader reader = new StreamReader(request.InputStream, Encoding.UTF8);
- pram = reader.ReadToEnd();
- reader.Close();
- reader.Dispose();
- }
- #region 业务处理
- try
- {
- //业务处理
- responseMessage = "业务结果";
- }
- catch (Exception ex)
- {
- //异常处理
- responseMessage = ex.Message;
- }
- #endregion 业务处理
- #region 返回给调用者
- //输出类型
- httpListenerContext.Response.ContentType = "text/html; charset=UTF-8";
- //返回状态
- httpListenerContext.Response.StatusCode = 200;
- //设置授权,尝试解决Jquery跨域问题
- //httpListenerContext.Response.Headers["Access-Control-Allow-Origin"] = "*";
- //httpListenerContext.Response.Headers["Access-Control-Allow-Methods"] = "GET,POST";
- //httpListenerContext.Response.Headers["Access-Control-Max-Age"] = "1000";
- try
- {
- //输出界面内容
- if (!string.IsNullOrEmpty(responseMessage))
- {
- //返回文本内容
- using (StreamWriter writer = new StreamWriter(httpListenerContext.Response.OutputStream))
- {
- writer.Write(responseMessage);
- }
- }
- }
- catch
- {
- //刷新太快异常,不做处理
- }
- #endregion 返回给调用者
- })).Start(httpListenerContext);
- }
- catch
- { }
- }
- })).Start();
- }
- }
위의 포트 바인딩 과정에서 오류가 보고되거나 추가에 실패할 경우, 다음 처리를 참고하시면 됩니다.
1. netsh 명령의 매개변수가 올바른지 확인하십시오.
2. SSL 인증서를 추가하지 못했습니다. 오류: 1312 지정된 로그인 세션이 존재하지 않습니다. 종료되었을 수도 있습니다. 처리 방법:
키보드 WIN+R을 누르고 다음과 같이 mmc.exe를 입력합니다.
'확인'을 클릭하면 다음 콘솔 루트 노드 인터페이스가 나타납니다.
파일->스냅인 추가/삭제를 선택하거나 단축키 ctrl+m을 직접 사용하여 다음 팝업을 표시하고 작업을 수행합니다.
그다음 개인수입증명서로 이동합니다.
마지막으로 SSL 인증서를 포트 번호에 바인딩합니다.
netsh http add sslcert ipport=0.0.0.0:8080 certhash=指纹 appid={程序GUID/newguid} clientcertnegotiation=enable