C#后台HttpWebRequest模拟跨域Ajax请求,注册Windows服务到服务器上

Posted 陈彦斌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#后台HttpWebRequest模拟跨域Ajax请求,注册Windows服务到服务器上相关的知识,希望对你有一定的参考价值。

  项目需求,暂且叫A、B公司吧。我们公司需要从A公司哪里读取机器上的数据,放到我们数据库中。然后再将数据库中存的数据,提供一个接口,B公司来调用,大概这个意思。

  好了,言归正传。这个是之前做好的界面,用户需要手动点击“开始”,然后写了个定时器,不停的来回调用

  部分源码(5秒调用后台处理)

 1     function refreshCount() {
 2         if (prj.is_port_state_1 == false) {
 3             var grid_down = query_panel.grid_down;
 4             var RequestData = { "macName": "" };
 5             $.ajax({
 6                 url: "http://172.30.16.254:8080/IWFM_HuaLian/dataDock/getMacState",
 7                 type: \'POST\',
 8                 dataType: "JSON",
 9                 contentType: \'application/json; charset=UTF-8\',
10                 crossDomain: true,
11                 data: JSON.stringify(RequestData),
12                 xhrFields: {
13                     \'Access-Control-Allow-Origin\': \'*\'
14                 },
15                 success: function (resData) {
16                     var res = JSON.stringify(resData);
17                     Ext.Ajax.request({
18                         url: "WC030Handlers.csx",
19                         params: {
20                             tag: \'GetMacState\',
21                             data: res
22                         },
23                         success: function (response, p) {
24                             grid_down.getStore().load();
25                         }
26                     });
27                 }
28             });
29         }
30     }
31 
32     Ext.Msg.alert(MsgMrg.OptMsg, "开始运行!");
33     t1 = window.setInterval(refreshCount, 5000);

  一天晚上,项目老总打电话过来说:这个功能需要优化下,不能让用户去手动点,应该写个Windows服务,注册到客户的服务器本地上,电脑一开机自动运行该服务。我:“好的,到时候功能优化下”。

  好了,这就是为啥写这篇博客的由来,下面开始演示DEMO

第一步:创建C# Winform服务

第二步:添加安装服务

第三步:设置服务的信息

第四步:选择本地服务

第五步:写业务逻辑(随性发挥)

 

第六步:生成项目,并创建二个bat文件

安装服务

1 格式:C:\\\\WINDOWS\\\\Microsoft.NET\\\\Framework\\\\v4.0.30319\\\\InstallUtil.exe  程序名称

卸载服务

 

1 格式:C:\\\\WINDOWS\\\\Microsoft.NET\\\\Framework\\\\v4.0.30319\\\\InstallUtil.exe /u 项目名

注:安装Windows服务,请用管理员身份运行

 

  好了,上面注册Windows服务已经会配置了,下面演示利用HttpWebRequest模拟Ajax请求

 DEMO

 源码

 1         private void Button1_Click(object sender, EventArgs e)
 2         {
 3             string res= PostWebRequest("http://172.30.16.254:8080/IWFM_HuaLian/dataDock/getMacState", "{ \\"macName\\": \\"\\" }", Encoding.UTF8);
 4         }
 5         /// <summary>
 6         /// Post数据接口
 7         /// </summary>
 8         /// <param name="postUrl">接口地址</param>
 9         /// <param name="paramData">提交json数据</param>
10         /// <param name="dataEncode">编码方式(Encoding.UTF8)</param>
11         /// <returns></returns>
12         private static string PostWebRequest(string postUrl, string paramData, Encoding dataEncode)
13         {
14             string responseContent = string.Empty;
15             try
16             {
17                 byte[] byteArray = dataEncode.GetBytes(paramData); //转化
18                 HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
19                 webReq.Method = "POST";
20                 webReq.ContentType = "application/json; charset=UTF-8";
21                 webReq.Accept = "application/json, text/javascript, */*; q=0.01"; //注:调试的过程中,报415,这里可能需要修改下
22                 webReq.ContentLength = byteArray.Length;
23                 using (Stream reqStream = webReq.GetRequestStream())
24                 {
25                     reqStream.Write(byteArray, 0, byteArray.Length);//写入参数
26                     //reqStream.Close();
27                 }
28                 using (HttpWebResponse response = (HttpWebResponse)webReq.GetResponse())
29                 {
30                     using (Stream myResponseStream = response.GetResponseStream())
31                     {
32                         using (StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8))
33                         {
34                             responseContent = myStreamReader.ReadToEnd().ToString();
35                         }
36                     }
37                 }
38             }
39             catch (Exception ex)
40             {
41                 return ex.Message;
42             }
43             return responseContent;
44         }

 

以上是关于C#后台HttpWebRequest模拟跨域Ajax请求,注册Windows服务到服务器上的主要内容,如果未能解决你的问题,请参考以下文章

c# .net 后台的httpwebrequest方法可以跨域访问吗?

C#,HttpWebRequest模拟发送Post请求

c# httpwebrequest 模拟登陆

c# HttpWebRequest 模拟HTTP post 传递JSON参数

转asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端

急急急!C#中winform发送 HttpWebRequest请求,不能连续发送