C# ASP.NET WebApi服务器搭建详解 - Win服务承载(Windows Service Hosting宿主)
C# ASP.NET WebApi服务器搭建详解 - Win服务承载(Windows Service Hosting宿主)
参考文章: C# ASP.NET WebApi服务器搭建详解 - IIS服务承载(IIS Hosting IIS宿主) C# ASP.NET WebApi服务器搭建详解 - 自承载(Self Hosting) 搭建Win服务承载(Windows Service Hosting宿主)ASP.NET WebApi服务器操作步骤详解: 1. 在VS解决方案建立Windows服务项目 Project,改名为:CSFramework.WebAPI.Demo.WinServiceHosting 添加Windows 服务,改名为WebApiServer.cs 2. 添加Windows 服务后,在WebApiServer.cs 添加如下代码。 OnStart:启动服务。 OnStop:停止服务。 C# Code: using Microsoft.Owin.Hosting; using System; using System.ServiceProcess; namespace CSFramework.WebAPI.Demo.WinServiceHosting { partial class WebApiServer : ServiceBase { private IDisposable _server = null; public WebApiServer() { InitializeComponent(); } protected override void OnStart(string[] args) { try { Log2Local.Instance.WriteInfo("C# ASP.NET WebApi服务器搭建详解 - 自承载(Self Hosting)"); string serverURL = "http://localhost:17999/"; Log2Local.Instance.WriteInfo("服务器地址:" + serverURL); //#if (DEBUG) // Debugger.Launch(); //运行调试模式 //#endif _server = WebApp.Start<StartupAppBuilder>(url: serverURL); Log2Local.Instance.WriteInfo("成功启动WebApiServer."); } catch (Exception ex) { Log2Local.Instance.WriteInfo("启动WebApiServer失败," + ex.Message); } } protected override void OnStop() { try { if (_server != null) _server.Dispose(); base.OnStop(); Log2Local.Instance.WriteInfo("成功停止WebApiServer."); } catch (Exception ex) { Log2Local.Instance.WriteException("停止WebApiServer失败," + ex.Message); } } } } //来源:C/S框架网(www.csframework.com) QQ:23404761 3. 给WebApiServer添加安装程序。 Windows服务需要安装服务才能启动的,不允许直接运行EXE程序的。 添加安装程序ProjectInstaller.cs 4. 安装程序设置服务名称、服务描述 C# Code: [RunInstaller(true)] public partial class ProjectInstaller : System.Configuration.Install.Installer { public ProjectInstaller() { InitializeComponent(); serviceInstaller1.ServiceName = "CSFramework.WebAPI.Demo.WinServiceHosting"; serviceInstaller1.DisplayName = "CSFramework.WebAPI服务器"; serviceInstaller1.Description = "CSFramework.WebAPI服务器,Windows服务承载(Hosting)"; } } //来源:C/S框架网(www.csframework.com) QQ:23404761 5. WebApi核心StartupAppBuilder类,用于配置WebApi服务器参数。 C# Code: public class StartupAppBuilder { public static void Configuration(IAppBuilder appBuilder) { // 在应用程序启动时运行的代码 //加载WebApi服务器配置信息 HttpConfiguration config = new HttpConfiguration(); //配置路由 var cors = new EnableCorsAttribute("*", "*", "*"); config.EnableCors(cors); config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "ActionApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional }); Log2Local.Instance.WriteInfo("配置JSON格式化."); //NuGet: Microsoft.Owin.Hosting; GlobalConfiguration.Configuration.Formatters.Insert(0, new PlainTextTypeFormatter()); config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; config.Formatters.JsonFormatter.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm"; config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; config.Formatters.Remove(config.Formatters.XmlFormatter); // 解决json序列化时的循环引用问题 config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; // 对 JSON 数据使用混合大小写。驼峰式,但是是javascript 首字母小写形式. //config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); // 对 JSON 数据使用混合大小写。跟属性名同样的大小.输出 config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new UnderlineSplitContractResolver(); Log2Local.Instance.WriteInfo("添加消息监听处理器."); config.MessageHandlers.Add(new RequestListenHandler(Log2Local.Instance)); //使用配置 appBuilder.UseWebApi(config); appBuilder.UseStageMarker(PipelineStage.PostAcquireState); //链接控制器 Type C1 = typeof(CSFramework.WebAPI.Demo.DemoController); Log2Local.Instance.WriteInfo("配置完成."); } } //来源:C/S框架网(www.csframework.com) QQ:23404761 6. 用于监听WebApi服务器所有请求的处理程序 C# Code: /// <summary> /// 监听WebAPI服务器所有请求. /// </summary> public class RequestListenHandler : DelegatingHandler { protected Log2Local _log; public RequestListenHandler(Log2Local log) { _log = log; } protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { //注意:若Request.Method=POST,不可读取Request.Body流(Stream)信息,一旦读取,会销毁Stream对象。 //Method=GET,读取RequestUri //控制台显示请求的URI信息 _log.WriteInfo("收到请求:" + request.RequestUri); //调用WebAPI控制器接口完毕,才执行下面的代码 return base.SendAsync(request, cancellationToken).ContinueWith((task) => { //添加日志 _log.WriteInfo("StatusCode:" + (task.Result as HttpResponseMessage).StatusCode.ToString()); return task.Result; }); } } //来源:C/S框架网(www.csframework.com) QQ:23404761 7. 建立用于安装win服务的批处理命令, 以管理员身份运行 _安装服务.bat _安装Win服务.bat dos command: path c:\windows\system32; path %SystemRoot%\Microsoft.NET\Framework\v4.0.30319; echo "开始卸载服务***************************" installutil.exe /u %~d0%~p0CSFramework.WebAPI.Demo.WinServiceHosting.exe echo "开始安装服务**************************" installutil.exe %~d0%~p0CSFramework.WebAPI.Demo.WinServiceHosting.exe echo "设置服务自动启动*********************" sc config CSFramework.WebAPI.Demo.WinServiceHosting start= auto Net Start CSFramework.WebAPI.Demo.WinServiceHosting pause; //来源:C/S框架网(www.csframework.com) QQ:23404761 8. 若安装win服务的时候弹出【设置服务登陆】对话框,需要把ServiceProcessInstaller组件Account属性设置为LocalService。重新编译,以管理员身份运行 _安装服务.bat。 9. 打开win服务管理器,查看当前服务器是否运行。 服务名称(对应Installer.ServiceName属性):CSFramework.WebAPI.Demo.WinServiceHosting 显示名称(对应Installer.DisplayName属性):CSFramework.WebAPI服务器 描述(对应Installer.Description属性):CSFramework.WebAPI服务器,Windows服务承载(Hosting) 10. 服务器启动成功后,在IE测试接口,输入 localhost:17999/api/demo/get 11. debug目录下的log.txt日志: 2020-02-17 21:14:38 | Info:C# ASP.NET WebApi服务器搭建详解 - 自承载(Self Hosting) | admin 2020-02-17 21:14:38 | Info:服务器地址:http://localhost:17999/ | admin 2020-02-17 21:14:38 | Info:配置JSON格式化. | admin 2020-02-17 21:14:39 | Info:添加消息监听处理器. | admin 2020-02-17 21:14:39 | Info:配置完成. | admin 2020-02-17 21:14:39 | Info:成功启动WebApiServer. | admin 2020-02-17 21:14:53 | Info:收到请求:http://localhost:17999/api/demo/get | admin 2020-02-17 21:14:53 | Info:StatusCode:OK | admin 2020-02-17 21:14:53 | Info:收到请求:http://localhost:17999/favicon.ico | admin 2020-02-17 21:14:53 | Info:StatusCode:NotFound | admin ....本文完.... .NET WebApi开发框架|MVC框架|后端框架|服务端框架-标准版V1.0 适用开发:快速构建支持多种客户端的服务端程序,支持APP、B/S、C/S跨平台移动终端等。 运行平台:Windows + .NET Framework 4.5 开发工具:Visual Studio 2015+,C#语言 数据库:Microsoft SQLServer 2008R2+(支持多数据库:Oracle/MySql) CSFramework.WebApi是服务端快速开发框架(后端框架),借助ASP.NET WebAPI底层架构的强大编程能力,封装成为可复用的以及可定制开发的服务端软件模板,CSFramework.WebApi提供可复用的软件架构和开发包,为用户快速轻松搭建基于HTTP协议、HTTPS协议以及支持多种客户端(如:APP、B/S、C/S、微信公众号、微信小程序等)各种跨平台移动终端的服务端应用程序。 服务端应用开发、后端接口开发是软件项目重要工作环节,服务端注重业务逻辑、数据处理和数据分析、算法等方面的设计和服务,前端主要体现在用户体验、界面操作和数据采集方面。前端软件系统和后端服务架构共同搭建跨平台大型数据管理应用系统。 扫一扫加微信:
参考文档:
WebApi服务器对IP地址黑名单限制 C#.NET IP地址工具类WebAPI服务器使用 VS发布及IIS服务器部署WebApi后台开发框架(原) 图片资源上传下载WebApi服务器 C#.NET IP端口绑定SSL证书支持HTTPS协议(用于Win服务自承载WebApi服务器) - C/S框架网原创 批处理命令启动Windows服务宿主WebApi服务器 WebApi架构详解,WebApi接口搭建与部署WebApi服务器 C# ASP.NET WebApi服务器搭建详解 - IIS服务承载(IIS Hosting IIS宿主) C# ASP.NET WebApi服务器搭建详解 - 自承载(Self Hosting) ASPNET WebApi服务器三种承载方式:SelfHosting,IIS Hosting, WinService Hosting Asp.Net开源服务端框架,WebApi后端框架标准版 WebApi实例教程和使用方法:部署和发布WebApi到IIS服务器 阿里云ECS服务器上IIS部署多个Web网站详解|www.CSframework.com 微信小程序后端框架 | C# ASP.NET服务端WebApi快速开发框架平台 运行ASP.NET 自承载WebApi服务器报错:未能加载文件或程序集System.Web.Http或它的某一个依赖项
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |