在項(xiàng)目中經(jīng)常會(huì)用到各種通訊方式,現(xiàn)介紹一下WinForm實(shí)現(xiàn)WebApi接口服務(wù),不依賴IIS宿主;編碼道路雖然枯燥,只要我們堅(jiān)定信念;時(shí)光會(huì)看見你的成長,也終將不負(fù)你的努力。↖(^ω^)↗
NuGet安裝Microsoft.AspNet.WebApi.OwinSelfHost
請求路由Startup.cs
using Owin;
using System;
using System.Net.Http.Headers;
using System.Web.Http;
namespace FilterDemo
{
class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
try
{
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
appBuilder.UseWebApi(config);
}
catch (Exception ex)
{
throw ex;
}
}
}
}
接口方法HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
namespace FilterDemo
{
public class HomeController : ApiController
{
[HttpGet]
public IHttpActionResult Get(int address)
{
string str = "123466";
return Json(str);
}
[HttpPost]
public IHttpActionResult Post([FromBody] List<string> values)
{
Dictionary<string, object> dic = new Dictionary<string, object>();
try {
FormMain.TriggerEvent.Message = values;
FormMain.TriggerEvent.OnMessage();
dic.Add("flag", true);
dic.Add("msg", "成功");
} catch(Exception ex) {
dic.Add("flag", false);
dic.Add("msg", ex.Message);
}
return Json(dic);
}
[HttpPut]
public IHttpActionResult Put(int id, string value)
{
string str = "123466";
return Json(str);
}
[HttpDelete]
public IHttpActionResult Delete(int id)
{
string str = "123466";
return Json(str);
}
}
}
啟動(dòng)WebApi接口服務(wù)
#region WebApi接口服務(wù)
public static OWINTriggerEvent TriggerEvent { get; set; }
private IDisposable _webApp;
private string BaseUrl = "http://192.168.200.84:2000";
private void StartServer()
{
string serverIp = ConfigurationManager.AppSettings["ServerIP"];
string serverPort = ConfigurationManager.AppSettings["ServerPort"];
BaseUrl = $"http://{serverIp}:{serverPort}";
_webApp = WebApp.Start<Startup>(BaseUrl);
AppendLog($"服務(wù)已啟動(dòng): {BaseUrl}");
var triggerEvent = new OWINTriggerEvent();
TriggerEvent = triggerEvent;
TriggerEvent.infoEvent += TriggerEvent_infoEvent;
}
private void TriggerEvent_infoEvent(object sender, EventArgs e)
{
try
{
List<string> msgList = TriggerEvent.Message;
AppendLog("接收到信息:"+ JsonConvert.SerializeObject(msgList));
foreach (var item in msgList)
{
loadPcdToImage(item);
AppendLog("處理點(diǎn)云文件:" + item);
}
}
catch (Exception ex)
{
throw;
}
}
private void StopServer()
{
_webApp?.Dispose();
AppendLog("服務(wù)已停止");
}
private void AppendLog(string message)
{
DateTime d = DateTime.Now;
string dateStr = d.ToString("yyyy-MM-dd HH:mm:ss:fff");
if (rtbLog.InvokeRequired)
rtbLog.BeginInvoke(new Action(() => rtbLog.AppendText(dateStr + " " + message + "\r\n")));
else
rtbLog.AppendText(dateStr + " " + message + "\r\n");
}
#endregion
Microsoft.AspNet.WebApi.OwinSelfHost是一個(gè)用于在非IIS環(huán)境下自托管ASP.NET Web API的NuGet包,它基于OWIN(Open Web Interface for .NET)規(guī)范實(shí)現(xiàn)?。
以下是其主要特點(diǎn)和用法:
- 允許Web API脫離IIS運(yùn)行,可在控制臺(tái)應(yīng)用、Windows服務(wù)等環(huán)境中托管?
- 使用HttpListener作為底層HTTP服務(wù)器?
- 支持完整的Web API功能,包括路由、控制器、過濾器等?
- ?安裝方式?
通過NuGet包管理器控制臺(tái)執(zhí)行命令:
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
這會(huì)自動(dòng)安裝相關(guān)依賴包,包括Microsoft.Owin.Host.HttpListener和Microsoft.AspNet.WebApi.Owin?。
- 創(chuàng)建控制臺(tái)應(yīng)用程序項(xiàng)目(.NET Framework 4.0+) ?
- 在Program.cs中啟動(dòng)OWIN宿主?
- 比HttpSelfHost更靈活(支持中間件管道)
- 支持靜態(tài)文件服務(wù)等擴(kuò)展功能?
閱讀原文:原文鏈接
該文章在 2025/7/7 11:43:43 編輯過