C# ASP.NET WebApi服务器搭建详解 - Win服务承载(Windows Service Hosting宿主)

  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


贴图图片-ASPNETWebApi服务器搭建详解win服务承载107


添加Windows 服务,改名为WebApiServer.cs


贴图图片-ASPNETWebApi服务器搭建详解win服务承载103

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程序的。

贴图图片-ASPNETWebApi服务器搭建详解win服务承载104

添加安装程序ProjectInstaller.cs

贴图图片-ASPNETWebApi服务器搭建详解win服务承载105


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。

贴图图片-ASPNETWebApi服务器搭建详解win服务承载106

9. 打开win服务管理器,查看当前服务器是否运行。

服务名称(对应Installer.ServiceName属性):CSFramework.WebAPI.Demo.WinServiceHosting
显示名称(对应Installer.DisplayName属性):CSFramework.WebAPI服务器
描述(对应Installer.Description属性):CSFramework.WebAPI服务器,Windows服务承载(Hosting)


贴图图片-ASPNETWebApi服务器搭建详解win服务承载109


10. 服务器启动成功后,在IE测试接口,输入 localhost:17999/api/demo/get


贴图图片-ASPNETWebApi服务器搭建详解win服务承载110


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)

WebApi服务端开发框架


  CSFramework.WebApi是服务端快速开发框架(后端框架),借助ASP.NET WebAPI底层架构的强大编程能力,封装成为可复用的以及可定制开发的服务端软件模板,CSFramework.WebApi提供可复用的软件架构和开发包,为用户快速轻松搭建基于HTTP协议、HTTPS协议以及支持多种客户端(如:APP、B/S、C/S、微信公众号、微信小程序等)各种跨平台移动终端的服务端应用程序。

    服务端应用开发、后端接口开发是软件项目重要工作环节,服务端注重业务逻辑、数据处理和数据分析、算法等方面的设计和服务,前端主要体现在用户体验、界面操作和数据采集方面。前端软件系统和后端服务架构共同搭建跨平台大型数据管理应用系统。


扫一扫加微信:
 



版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
发表评论

评论内容
昵称:
关联文章

C# ASP.NET WebApi服务器详解 - Win服务承载Windows Service Hosting宿主
C# ASP.NET WebApi服务器详解 - IIS服务承载(IIS Hosting IIS宿主
C# ASP.NET WebApi服务器详解 - 自承载(Self Hosting
WebApi架构详解WebApi接口与部署WebApi服务器
承载 Service Host 和使用 WCF 服务
CSFramework.WebApi后端开发框架服务器宿主承载方式
ASPNET WebApi服务器三种承载方式:SelfHosting,IIS Hosting, WinService Hosting
C#.NET 后端WebApi接口教程,WebApi接口开发实例
原创文章:WebApi接口开发实例,和部署WebApi接口
微信小程序使用https协议的WebApi后端应用服务Win服务宿主或自承载
C#.NET VS2015运行时调试Windows服务(宿主)承载的WCF程序
批处理命令启动Windows服务宿主WebApi服务器
WCF开发框架 - vs发布IIS承载(IIS Hosting)的WCF应用服务详解
C#.NET IP端口绑定SSL证书支持HTTPS协议(用于Win服务承载WebApi服务器) - C/S框架网原创
原创WebApi框架:采用HTTPS协议SelfHosting,Windows服务承载WebApi服务
Asp.Net开源服务端框架,WebApi后端框架标准版
CSFramework.WebApi框架快速后端服务支持APP、B/S、C/S、微信小程序、公众号、Web客户端
C/S系统快速开发平台采用Windows服务承载的WCF服务器
微信小程序后端框架 | C# ASP.NET服务WebApi快速开发框架平台
WebApi快速开发框架,C# ASP.NET后端开发平台