C#开发WPF自宿主web服务

news2024/10/6 1:41:56

一直都在使用IIS部署WebAPI的模式,经过讨论决定不适用IIS,创建自宿主程序启动AP

使用微软自带OWIN来实现自承载Web Api框架,集成了swagger接口文档

话不多说,详细如下:

大致的项目框架结构:

使用NuGet安装以下几个包:

	<package id="Beginor.Owin.StaticFile" version="0.3.1" targetFramework="net48" />
	<package id="Microsoft.AspNet.Cors" version="5.2.9" targetFramework="net48" />
	<package id="Microsoft.AspNet.WebApi.Client" version="5.2.9" targetFramework="net48" />
	<package id="Microsoft.AspNet.WebApi.Core" version="5.2.9" targetFramework="net48" />
	<package id="Microsoft.AspNet.WebApi.Cors" version="5.2.9" targetFramework="net48" />
	<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.9" targetFramework="net48" />
	<package id="Microsoft.AspNet.WebApi.OwinSelfHost" version="5.2.9" targetFramework="net48" />
	<package id="Microsoft.AspNet.WebApi.SelfHost" version="5.2.9" targetFramework="net48" />
	<package id="Microsoft.AspNetCore.Http.Features" version="5.0.17" targetFramework="net48" />
	<package id="Microsoft.Extensions.Primitives" version="7.0.0" targetFramework="net48" />
	<package id="Microsoft.Owin" version="4.2.2" targetFramework="net48" />
	<package id="Microsoft.Owin.Cors" version="4.2.2" targetFramework="net48" />
	<package id="Microsoft.Owin.Host.HttpListener" version="4.2.2" targetFramework="net48" />
	<package id="Microsoft.Owin.Hosting" version="4.2.2" targetFramework="net48" />
	<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net48" />
	<package id="Owin" version="1.0" targetFramework="net48" />
	<package id="SqlSugar" version="5.1.4.70" targetFramework="net48" />
	<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
	<package id="System.IO.Pipelines" version="7.0.0" targetFramework="net48" />
	<package id="System.Memory" version="4.5.5" targetFramework="net48" />
	<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
	<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
	<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net48" />

在宿主服务创建RouteConfig类,注:集成了Swagger 大伙在配置的时候注意

public class RouteConfig
    {
        public void Configuration(IAppBuilder appBuilder)
        {
            HttpConfiguration config = new HttpConfiguration();
            config.MapHttpAttributeRoutes();
            //跨域配置,经测试有效
            config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
            config.Routes.MapHttpRoute(name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { cotroller = "home", action = RouteParameter.Optional, id = RouteParameter.Optional });
            config.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
            config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
            //异常拦截器
            //config.Filters.Add(new ExceptionFilter());
            方法拦截器
            //config.Filters.Add(new ActionFilter());
            SwaggerConfig.Register(config);
            appBuilder.UseWebApi(config);
        }
    }

 再创建一个启动服务类ServerStartup

public static class ServerStartup
    {
        private static IDisposable selfHost;
        public static void ServerStart()
        {
            if (selfHost == null)
            {
                var port = 8010;
                StartOptions options = new StartOptions();
                options.Urls.Add("http://localhost:" + port);
                selfHost = WebApp.Start<RouteConfig>(options);
            }
        }
        public static void Shutdown()
        {
            selfHost?.Dispose();
        }
    }

创建一个Controllers文件加里面加入TestController

他会自动继承apiContrller,定义几个常见的方法(请求)

方法可以有重载,方法体里面和C#代码差不多,原来怎么写还怎么写

swagger的配置这个我这菜鸟就不搞了  csdn上面大把大佬写的明明白白

嘿嘿,  直接在wpf应用项目中调用启动

调用设定的端口:http://localhost:8010/swagger/ui/index

接口文档就打开了

然而只是这样吗?nonono,神奇的事情即将发生。把vs关了,在bin文件中找到wpf应用执行exe文件,点击执行

api接口文档照样可以显示,接口调用正常,66666,感觉还行

 擦~这这iis网站就这么不需要部署了?

 

 

源码奉上,需要的老铁自己去下载 

来造作吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/510143.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

讨论func与scan分开长tree的局限性

当func clock的root都定义在mux前面&#xff0c;分开长tree有助于做短func tree&#xff0c;减少clock buffer&#xff0c;但当部分func clock的root定义在其他clock后面&#xff0c;如下图&#xff0c;分开长tree就会导致scan clock产生很大的skew&#xff0c;从而引起hold vi…

Linux系统之Team链路聚合配置

Linux系统之Team链路聚合配置 一、Team链路聚合介绍1. Teaming技术简介2. 网卡的bonding和Teaming技术3. Team常用工作模式 二、实践环境规划三、添加物理网卡1. 新增物理网卡2. 查看网卡信息 四、Team链路聚合配置1. 查看team的工作模式2. 创建team0的网络接口3. 配置team0接口…

物联网仿真调试与下载|CC254基础开发(通用I/O)|独立按键开发|长短按键实现思路|物联网之蓝牙4.0 BLE基础-学习笔记(4)

文章目录 7、仿真调试与下载8、CC254基础开发(通用I/O)示例:LED流水灯 9、独立按键开发 7、仿真调试与下载 仿真调试下钱器驱动的安装 程序仿真调试 结合smartRF Flash Programmer软件实现程序下载 设置 F:\IOT\blud_prj\test\Debug\Exe 获取CC2540蓝牙设备的IEEE地址 8…

Unity期末AI足球游戏小项目(免费开源)

​ 该游戏项目仅供参考&#xff0c;下载链接在文末。若需要答辩论文请私聊 版本&#xff1a;Unity 2018.4 文章目录 游戏介绍整体框架部分截图答辩论文截图答辩问题1 倒计时功能如何实现&#xff1f;2 AI的实现体现在哪一方面&#xff1f;3 计分系统的实现&#xff1f; 游戏介…

VR全景园区:数字化旅游业的新未来

VR全景园区是未来数字化旅游业的一种新兴形式。它利用高清晰度的3D图像和360度全景拍摄技术&#xff0c;将景区中的自然风光、历史文化和人文风情等元素呈现在游客面前。VR全景园区不仅可以为游客提供身临其境的参观体验&#xff0c;还可以有效地推广当地的文化和旅游资源。 【…

【FOF管理策略与技术】第1章 FOF的基本概念

第1章 FOF的基本概念 文章目录 第1章 FOF的基本概念一、FOF的定义与分类1 FOF的定义1.1、FOF的两个显著特点1.2、FOF天生的不足之处 2 FOF的分类2.1、按投资标的区分2.2、按所投资基金的管理权归属区分2.3、按投资基金种类的不同区分2.4、按FOF与其标的基金的管理运作方式(主动…

【Linux】system V共享内存与信号量

目录 一、前言 二、共享内存 1、基本原理 2、实现代码 2.1、创建共享内存 2.2、释放共享内存 2.3、关联共享内存 2.4、与共享内存去关联 2.5、进程间通信 2.6、补充内容 三、system V信号量 1、概念 2、信号量 3、相关接口 3.1、获取信号量 3.2、释放信号量 …

机器学习模型————分类模型

K近邻&#xff08;KNN&#xff09; 逻辑斯提回归 Sigmoid函数&#xff08;压缩函数&#xff09; 梯度下降法求解

叶工好容2-云原生网络

前言 IT行业中网络技术本身就是最枯燥但又最复杂的一块&#xff0c;kebernetes用到的这些虚拟网络技术更是难上加难&#xff0c;许多知识点容易记混淆&#xff0c;或者说能背过概念但不清楚它出现的前因后果和应用场景&#xff0c;本篇博文会按照底层协议->上层技术->顶…

工业园区的智慧安监方案:AI视频边缘计算技术的应用场景剖析

一、方案背景 针对工业园区化工企业多且安全及环保等方面存在风险高、隐患多、精细化管控复杂的情况&#xff0c;需要全面整合并优化园区现有基础设施、系统平台等信息化资源&#xff0c;建立园区的智能化风险预警管理平台&#xff0c;利用信息化手段&#xff0c;增强园区安全…

Baklib知识库搭建平台产品操作手册

产品概述 Baklib是一款专业的知识库搭建平台&#xff0c;它帮助客户搭建内部知识库和对外帮助中心。在今天的信息时代&#xff0c;知识已经成为组织的核心竞争力&#xff0c;而Baklib正是为了帮助组织构建完整的知识体系&#xff0c;提高组织的核心竞争力而生。 Baklib具有以…

刷题之另类加法与走方格的方案数

目录 一、编程题 1.另类加法 2.走方格的方案数 二、选择题 一、编程题 1.另类加法 链接&#xff1a;另类加法_牛客题霸_牛客网 (nowcoder.com) 描述 给定两个int A和B。编写一个函数返回AB的值&#xff0c;但不得使用或其他算数运算符。 测试样例&#xff1a; 1,2 返回&am…

GitHub简单使用

一、安装git客户端(查看版本git --version)&#xff1a; Linux&#xff1a;yum install -y git Mac:brew install git windows:https://git-scm.com/downloads 配置git(可通过git config --list查看配置的内容)&#xff1a; git config --global user.name "用户名&qu…

计算机视觉——day89 Restormer:高效的高分辨率图像恢复变压器(CVPR简读)

Restormer&#xff1a;高效的高分辨率图像恢复变压器&#xff08;CVPR简读&#xff09; 1. Introduction3. Method4. 实验与分析5. 结论 Restormer: Efficient Transformer for High-Resolution Image Restoration 1. Introduction 摘要部分简要总结了一下当前transformer的广…

(附源码)计算机毕业设计Java对外汉语教学辅助平台

项目运行 &#x1f345;包售后&#xff0c;包调试&#xff0c;包讲解&#x1f345; &#x1f345;获取方式1:文章末尾获取联系&#x1f345; &#x1f345;获取方式2:点我进入&#xff0c;文章末尾获取联系&#x1f345; &#x1f345;包售后&#xff0c;包调试&#xff0c;包讲…

SpringBoot 创建和使用

SpringBoot 创建和使用 1. 初识 SpringBoot Spring 的诞生是为了简化 java 程序的开发 , 而Spring Boot 的诞生是为了简化 Spring 程序开发. Spring boot 翻译以下就是"脚手架" , 有了脚手架就可以快速的开发和使用 Spring . 2. Spring Boot 优点 快速的集成框架…

【JSON】谷歌浏览器JSON可视化插件:JSON-Handle

摘要 : JSON-handle是一款对JSON格式的内容进行浏览和编辑&#xff0c;以树形图样式展现JSON文档&#xff0c;并可实时编辑。 今天我推荐一款chrome/Firfox下处理json的插件JSON-handle&#xff0c;这个应该是我用过最好最方便的了。 插件功能 实际开发工作中经常用到json数据&…

基于无线传感网络(WSN)的目标跟踪技术(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 无线传感器网络由于其自组织性、鲁棒性及节点数量巨大的特点,非常适合于目标跟踪。无线传感器网络中的移动目标跟踪实际上就是…

centerpoint论文和代码解读

目录 一、序论 二、论文结构 三、代码 论文地址&#xff1a; https://arxiv.org/pdf/2006.11275.pdf 代码地址&#xff1a;tianweiy/CenterPoint (github.com) 一、序论 centorpoint是一种anchor-free的方法&#xff0c;直接预测物体的中心点&#xff0c;然后直接回归其wh…

《微服务实战》 第四章 Spring Cloud Netflix 之 Eureka

前言 Eureka 是 Netflix 公司开发的一款开源的服务注册与发现组件。 Spring Cloud 使用 Spring Boot 思想为 Eureka 增加了自动化配置&#xff0c;开发人员只需要引入相关依赖和注解&#xff0c;就能将 Spring Boot 构建的微服务轻松地与 Eureka 进行整合。 1、Eureka 两大组…