.NET 5学习笔记(11)—— Host Blazor WebAssembly in a Windows Service
实在是被某软忽悠瘸了,愤而写此一篇。希望能让同样需求的同学们少走弯路。
某软在《在 Windows 服务中托管 ASP.NET Core》中,介绍了通过创建Worker Service工程,来将.NET Core和.NET 5的程序以Windows Service的形式运行。但是某软你得说明,托管ASP.NET Core Web Application,并不需要额外创建一个Worker Service工程啊,再加上GitHub上两个放在一块的sample project,直接把我误导瘸了……
今天我就要记录一下这个事情,其实是多么的简单,控诉某软文档不走心。
接下来让我们实践一把。根据剧情需要,这里应该是一个Blazor WebAssembly App。

记得勾选ASP.NET Core hosted,会为我们额外创建一个用于Host的ASP.NET Core Web Application。如果不新建Web Application,同时也没有可用的Web Application,单一的Blazor WebAssembly App是没有办法进行使用Windows Service托管的。

Create按钮点击下去,只见Visual Studio一通操作,建了三个工程。我们稳住不要慌,按F5运行,现在的情况是下图这个样子。左边是我们新建的Blazor App在浏览器里跑起来的样子。右侧的Solution Explorer中,BlazorHostInWinService.Client是程序的主体,所有的Page都在这里画。BlazorHostInWinService.Server是一个空的WebApi工程,其中的WeatherForecastController提供了给Blazor Fetch Data页面测试用的天气数据。至于最下面的Shared工程,可以理解为Client和Server之间传递数据,共享所使用的DTO对象,在该示例中,仅有一个Class WeatherForecast。

当前我们的程序是通过IIS Express来运行的,接着我们要把该工程通过Windows Service来托管运行。首先需要给BlazorHostInWinService.Server工程添加NuGet包 Microsoft.AspNetCore.Hosting.WindowsServices。再打开Program.cs文件,为IHostBuilder对象添加对UseWindowsService方法的调用。
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
} public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
额,好像也没有其他事情可以做了,让我们publish该项目。依然是选择BlazorHostInWindowsService.Server工程,右键菜单中的publish点击后,出现如下界面,选择Folder后点击Finish。

在如下图的界面中,再一次开心的点击publish。编译过程中我们可以摸会鱼,直到在Output窗口中出现迷人的信息:
========== Build: 3 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========

然后让我们打开Target location,即bin\Release\net5.0\publish\。把所有的文件都拷贝到我们希望部署的位置,比如C:\Users\xingzheng\Documents\BlazorWinService文件夹。
最后就是创建Windows Service了,我们打开具有admin权限的CMD窗口。键入
sc create FirstBlazorAppService binPath="C:\Users\dell\Documents\BlazorWinService\BlazorInWinServiceTest1.Server.exe"

此时我们打开Windows Services的界面,启动FirstBlazorAppService即可。再返回到浏览器输入http://localhost:5000/

标题是我在Index.razor文件中手动改的,也为了区别之前通过IIS Express运行的页面。
本篇就到这里,简单地介绍了如何将Blazor App通过Windows Service托管。
GitHub:
https://github.com/manupstairs/BlazorHostInWinService
.NET 5学习笔记(11)—— Host Blazor WebAssembly in a Windows Service的更多相关文章
- Ext.Net学习笔记11:Ext.Net GridPanel的用法
Ext.Net学习笔记11:Ext.Net GridPanel的用法 GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: < ...
- SQL反模式学习笔记11 限定列的有效值
目标:限定列的有效值,将一列的有效字段值约束在一个固定的集合中.类似于数据字典. 反模式:在列定义上指定可选值 1. 对某一列定义一个检查约束项,这个约束不允许往列中插入或者更新任何会导致约束失败的值 ...
- golang学习笔记11 golang要用jetbrain的golang这个IDE工具开发才好
golang学习笔记11 golang要用jetbrain的golang这个IDE工具开发才好 jetbrain家的全套ide都很好用,一定要dark背景风格才装B 从File-->s ...
- Spring MVC 学习笔记11 —— 后端返回json格式数据
Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...
- Python3+Selenium3+webdriver学习笔记11(cookie处理)
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记11(cookie处理)'''from selenium im ...
- 并发编程学习笔记(11)----FutureTask的使用及实现
1. Future的使用 Future模式解决的问题是.在实际的运用场景中,可能某一个任务执行起来非常耗时,如果我们线程一直等着该任务执行完成再去执行其他的代码,就会损耗很大的性能,而Future接口 ...
- 《C++ Primer Plus》学习笔记11
<C++ Primer Plus>学习笔记11 第17章 输入.输出和文件 <<<<<<<<<<<<<< ...
- SpringMVC:学习笔记(11)——依赖注入与@Autowired
SpringMVC:学习笔记(11)——依赖注入与@Autowired 使用@Autowired 从Spring2.5开始,它引入了一种全新的依赖注入方式,即通过@Autowired注解.这个注解允许 ...
- Spring 源码学习笔记11——Spring事务
Spring 源码学习笔记11--Spring事务 Spring事务是基于Spring Aop的扩展 AOP的知识参见<Spring 源码学习笔记10--Spring AOP> 图片参考了 ...
随机推荐
- CF1397-C. Multiples of Length
CF1397-C. Multiples of Length 题意: 给出一个长度为\(n\)的序列,让你进行下面操作三次使得整个序列全部变为\(0\): 在序列中选中一段序列\((l, r)\), ...
- kubernetes进阶(一) kubectl工具使用详解
管理k8s核心资源的三种基本方法: 一.陈述式-主要依赖命令行工具 --可以满足90%以上的使用场景,但是缺点也很明显: 命令冗长,复杂,难以记忆 特定场景下,无法实现管理需求 对资源的增.删.查操 ...
- java笔试中创建String对象的思考
题目是这样的下面那些生成新的String对象() A . String s = new String(); B . String s = new String("A"); C. ...
- hdu-1159 1087 1257(dp)
本文就最长公共子序列,最长连续递增子序列的长度,最大连续递增子序列的值进行对比. hdu-1159: Common Subsequence Time Limit: 2000/1000 MS (Java ...
- 解决.dll类等文件丢失或出错
简单暴力: 去官网下载WIN10 SDK 并安装, 将本机的DLL类文件重新刷新一遍. https://developer.microsoft.com/en-US/windows/downloads/ ...
- translate.js
http://www.openxrest.com/translatejs/index.html translate.js translate.js is a jQuery plugin to tran ...
- CSS3 优先级
CSS3 优先级 https://developer.mozilla.org/zh-CN/docs/Web/CSS/Specificity 优先级 在本文章中 概念 优先级是如何计算的? 选择器 ...
- JWT & JSON Web Tokens
JSON Web Tokens https://jwt.io json web token example https://jwt.io/introduction/ https://medium.co ...
- queueMicrotask & microtask
queueMicrotask & microtask microtask microtask queue Promise Mutation Observer API MutationObser ...
- dategrip的使用技巧
原文链接:https://blog.csdn.net/weixin_44421461/article/details/109541903 数据表复制,可以直接用sql语句 1.复制表结构及数据到新表 ...