Windows服务,线上的监控程序,监控指定的服务
1
高胜
2023-05-23 cf31c5a262ad9f8fe66e884c4ca82d6c060422ff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
 
namespace HDLMonitorService.Helper
{
    public class HttpHp
    {
        /// <summary>
        /// 发送POST请求
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="url"></param>
        /// <param name="reqDataStr"></param>
        /// <returns></returns>
        public static T Post<T>(string url, string reqDataStr) where T : class
        {
            return HttpRequet<T>(url, reqDataStr, "POST", "application/json;charset=UTF-8");
        }
 
        /// <summary>
        /// 发送HTTP请求
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="url"></param>
        /// <param name="reqDataStr"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public static T HttpRequet<T>(string url, string reqDataStr, string Method, string contentType) where T : class
        {
            ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
 
            var request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = Method;
            request.ContentType = contentType;
            request.ContentLength = 0;
            if (reqDataStr != null)
            {
                var reqData = Encoding.UTF8.GetBytes(reqDataStr);
                request.ContentLength = reqData.Length;
 
                using (var stream = request.GetRequestStream())
                {
                    stream.Write(reqData, 0, reqData.Length);
                }
            }
 
            var response = (HttpWebResponse)request.GetResponse();
            var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
            return JsonConvert.DeserializeObject<T>(responseString);
        }
 
        /// <summary>
        /// 2020-11-02
        /// 基础服务的接口都要校验sign
        /// 计算sign签名
        /// </summary>
        /// <returns></returns>
        public static string GetSignRequestJson(object requestObj, Dictionary<string, object> paramDictionary = null)
        {
            try
            {
                //1. 将model实体转为Dictionary<string, object>
                if (paramDictionary == null)
                {
                    paramDictionary = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(Newtonsoft.Json.JsonConvert.SerializeObject(requestObj));
                }
                //2. 计算sign
                if (paramDictionary != null)
                {
                    paramDictionary.Add("appKey", ConfigurationManager.AppSettings["AppKey"].ToString());
                    paramDictionary.Add("timestamp", GetTimestamp());
                    //2.1 字典升序
                    paramDictionary = paramDictionary.OrderBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value);
                    //2.2 拼接按URL键值对
                    string str = string.Empty;
                    foreach (KeyValuePair<string, object> item in paramDictionary)
                    {
                        //Value为null不参加校验
                        if (item.Value != null)
                        {
                            //Value.ToString()为null或者""也不参加校验
                            //if (!string.IsNullOrEmpty(item.Value.ToString()) && (item.Value is string || item.Value.GetType().IsValueType))
                            //{
                            //检测当前参数是否需要参与校验
                            if (IfValueNeedSign(item.Value.ToString()))
                            {
                                //如果是bool类型,要转小写
                                if (item.Value is bool)
                                {
                                    str += item.Key + "=" + item.Value.ToString().ToLower() + "&";
                                }
                                else
                                {
                                    str += item.Key + "=" + item.Value.ToString() + "&";
                                }
                            }
                        }
                    }
 
                    //2.3 拼接SECRET_KEY
                    str = str.Substring(0, str.Length - 1) + ConfigurationManager.AppSettings["SecretKey"].ToString();
                    //2.4 MD5转换+转小写
                    var signstr = SignMD5Encrypt(str);
                    paramDictionary.Add("sign", signstr);
                    var signResult = Newtonsoft.Json.JsonConvert.SerializeObject(paramDictionary);
                    return signResult;
                }
                else
                {
                    return "";
                }
            }
            catch
            {
                return "";
            }
        }
 
        /// <summary>
        /// 判断当前值是否需要参与签名,保持跟云端一致
        /// 空字符串不参与
        /// 数组,集合,对象不参与
        /// </summary>
        /// <param name="valueStr"></param>
        /// <returns></returns>
        static bool IfValueNeedSign(string valueStr)
        {
            if (string.IsNullOrEmpty(valueStr) || valueStr.StartsWith("{") || valueStr.StartsWith("["))
            {
                return false;
            }
            return true;
        }
 
        static long GetTimestamp()
        {
            return (long)(DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0)).TotalMilliseconds;
        }
 
        static string SignMD5Encrypt(string str)
        {
            byte[] result = Encoding.UTF8.GetBytes(str.Trim());    //tbPass为输入密码的文本框  
            var md5 = new MD5CryptoServiceProvider();
            byte[] output = md5.ComputeHash(result);
            string passwordMD5 = BitConverter.ToString(output).Replace("-", string.Empty);  //tbMd5pass为输出加密文本的文本框  
 
            return passwordMD5.Trim().ToLower();
        }
    }
}