利用HttpListenerContext、HttpListenerRequest监听接口
//baseUrl:所要监听的接口地址
public FISPicDataInterface(string baseUrl)
{
GetFisData(baseUrl);
}
创建和控制线程
public void GetFisData(string baseUrl)
{
httpPostRequest.Prefixes.Add(baseUrl);
httpPostRequest.Start();
Thread ThrednHttpPostRequest = new Thread(new ThreadStart(httpPostRequestHandle));
ThrednHttpPostRequest.Start();
}
真正的方法
private void httpPostRequestHandle()
{
while (httpPostRequest.IsListening)
{
String result = null;
HttpListenerContext requestContext = httpPostRequest.GetContext();
HttpListenerRequest requests;
string postValues = "";
requests = requestContext.Request;
StreamReader sr = new StreamReader(requests.InputStream);
string jsonstr = sr.ReadToEnd();
jsonstr = HttpUtility.UrlDecode(jsonstr, Encoding.UTF8);
Dictionary<String, String> valueDict = PostValues2Dictionary(jsonstr);
TaskFISPicHandler?.Invoke(valueDict, null);
HttpListenerContext request = (HttpListenerContext)requestContext;
request.Response.StatusCode = 200;
request.Response.Headers.Add("Access-Control-Allow-Origin", "*");
request.Response.ContentType = "application/json";
requestContext.Response.ContentEncoding = Encoding.UTF8;
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = "true", msg = "监听成功" }));
request.Response.ContentLength64 = buffer.Length;
var output = request.Response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
}
}
注意:如果服务端IIS 提示“拒绝访问”,可能是因为未添加端口等。解决方法如下:
以管理员模式运行CMD
可以先查看操作系统中是否已经存在的保留项:netsh http show urlacl
删除操作系统中已存在的保留项:netsh http delete urlacl url=http://192.186.1.23:8080/
添加对应的URL
netsh http add urlacl url=http://192.168.1.103:8080//Home/PostFisData/ user=Everyone listen=yes
此处URL 要填写完整的。