using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; namespace Test { public class MesWebServer { private HttpListener httpListener; private readonly string taskName = "web_server"; public MesWebServer() { httpListener = new HttpListener(); SimpleListenerExample(new string[] { "http://*:80/DeviceApi/ReceiveTechProParam/" }); } ~MesWebServer() { httpListener.Stop(); httpListener.Close(); } // This example requires the System and System.Net namespaces. public void SimpleListenerExample(string[] prefixes) { if (!HttpListener.IsSupported) { Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class."); return; } // URI prefixes are required, // for example "http://contoso.com:8080/index/". if (prefixes == null || prefixes.Length == 0) throw new ArgumentException("prefixes"); // Create a listener. //HttpListener listener = new HttpListener(); // Add the prefixes. foreach (string s in prefixes) { httpListener.Prefixes.Add(s); } httpListener.Start(); Console.WriteLine("Listening..."); Task.Factory.StartNew(ContextHandle, TaskCreationOptions.LongRunning); //httpListener.Stop(); } private void ContextHandle() { // Note: The GetContext method blocks while waiting for a request. HttpListenerContext context = httpListener.GetContext(); HttpListenerRequest request = context.Request; //StreamReader reader = new StreamReader(request.InputStream); // Obtain a response object. //var requestData = reader.ReadToEnd(); // Construct a response. string responseString = "<HTML><BODY> Hello world!</BODY></HTML>"; string path = request.Url.Segments.LastOrDefault(); path = path.Remove(path.IndexOf('/'), 1); switch (path) { case "ReceiveTechProParam": SaveFormula(request, ref responseString); break; default: break; } HttpListenerResponse response = context.Response; byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString); // Get a response stream and write the response to it. response.ContentLength64 = buffer.Length; Stream output = response.OutputStream; output.Write(buffer, 0, buffer.Length); // You must close the output stream. output.Close(); } private void SaveFormula(HttpListenerRequest request, ref string response) { ServerResponse res = new ServerResponse(); try { StreamReader reader = new StreamReader(request.InputStream); // Obtain a response object. var requestData = reader.ReadToEnd(); reader.Close(); reader.Dispose(); var model = JsonConvert.DeserializeObject<ServerFormulaRequest>(requestData); // for (int i = 0; i < model.Data.Length; i++) // { // IniFile.WriteString(model.Id, model.Data[i].Name, model.Data[i].Value, Def.GetAbsPathName(Def.OvenParameterCFG)); // } res.StatusCode = 0; } catch (Exception ex) { Console.WriteLine($"{request.Url.AbsoluteUri}接受请求错误,原因:{ex.Message}"); res.StatusCode = -1; res.Message = $"数据格式错误:{ex.Message}"; } finally { response = JsonConvert.SerializeObject(res); } } public class ServerRequest { [JsonProperty("process_id")] public string ProcessId { get; set; } [JsonProperty("equipment_id")] public string EquipmentId { get; set; } } public class ServerFormulaRequest : ServerRequest { [JsonProperty("formula_no")] public string Id { get; set; } // 配方号 [JsonProperty("product_no")] public string ProductNo { get; set; } [JsonProperty("product_name")] public string ProductName { get; set; } [JsonProperty("data")] public FormulaParam[] Data { get; set; } } public class FormulaParam { [JsonProperty("parameter_code")] public string Id { get; set; } [JsonProperty("parameter_name")] public string Name { get; set; } [JsonProperty("parameter_unit")] public string Unit { get; set; } [JsonProperty("parameter_upper")] public string Upper { get; set; } [JsonProperty("parameter_value")] public string Value { get; set; } [JsonProperty("parameter_lower")] public string Lower { get; set; } } public class ServerResponse { [JsonProperty("status_code")] public int StatusCode { get; set; } [JsonProperty("message")] public string Message { get; set; } } } }
使用方式
MesWebServer mesWebServer = new MesWebServer();
注意:调试的话要用管理员方式打开VS
运行程序也要用管理员方式打开程序