凭借其最新的更新,Blazor框架现在为开发人员提供了创建服务器端应用程序的能力。继续阅读以了解具体方法。
介绍
我们都知道Blazor框架是一个客户端Web框架。但是可以运行与UI线程分开的Blazor应用程序吗?最新版本的Blazor(0.5.0)使我们能够灵活地在渲染过程的单独过程中运行Blazor。我们将在本文中探讨服务器端Blazor。
什么是服务器端Blazor?
由于Blazor是一个客户端Web框架,因此组件逻辑和DOM交互都发生在同一个进程中。
但是,Blazor框架的设计非常灵活且足够灵活,可以将应用程序与渲染过程分开运行。例如,我们可以在与Web线程分开的Web工作线程中运行Blazor。
在这种情况下,UI线程将事件推送到Blazor工作线程,Blazor将根据需要将UI更新推送到UI线程。尽管Blazor尚不支持此功能,但Blazor框架旨在处理此类场景,并有望在未来的版本中支持它。
从Blazor 0.5.0开始,我们可以在服务器上运行Blazor应用程序。这意味着我们可以在.NET Core上运行服务器端的Blazor组件,而其他功能(如UI更新,事件处理和Javascript互操作调用)则通过网络上的SignalR连接进行处理。.NET部分在CoreCLR而不是WebAssembly下运行,这使我们能够访问完整的.NET生态系统,调试,JIT编译等。这为Blazor框架增加了可扩展性,因为服务器端Blazor使用与客户端相同的组件模型 - 一边Blazor应用程序。
让我们创建我们的第一个服务器端Blazor应用程序并进行探索,以便更好地理解这个新功能。
先决条件
从此处安装.NET Core 2.1或更高版本的SDK 。从此处安装Visual Studio 2017 v15.7或更高版本。从此处安装ASP.NET Core Blazor语言服务扩展。
低于v15.7的Visual Studio 2017版本不支持Blazor框架。
创建服务器端Blazor应用程序
打开Visual Studio并选择File >> New >> Project。
选择项目后,将打开“新建项目”对话框。从左侧面板中选择Visual C#菜单中的.NET Core。然后,从可用的项目类型中选择“ASP.NET Core Web Application”。将项目名称设置为ServerSideBlazor,然后按确定。
单击“确定”后,将打开一个新对话框,要求您选择项目模板。您将在模板窗口的左上角看到两个下拉菜单。从这些下拉列表中选择“.NET Core”和“ASP.NET Core 2.1”。然后,选择“Blazor(ASP.NET Core中的服务器端)”模板,然后按“确定”。
这将创建我们的服务器端Blazor解决方案。您可以在Solution Explorer中观察文件夹结构,如下图所示:
该解决方案有两个项目文件:
ServerSideBlazor.App:这是我们的ASP.NET Core托管项目。ServerSideBlazor.Server:这包含我们的服务器端Blazor应用程序。
我们所有的组件逻辑都在服务器端Blazor应用程序中。但是,此逻辑不在浏览器的客户端运行,而是在ASP.NET Core主机应用程序的服务器端运行。此应用程序使用blazor.server.js的,而不是自举的blazor.webassembly.js正常Blazor应用程序使用。这允许应用程序通过网络建立SignalR连接,以处理UI更新和事件转发。所述blazor.server.js存在于“\ ServerSideBlazor.App \ BIN \调试\ netstandard2.0 \ DIST \ _framework”文件夹和<script>标签以将其包含在项目中的存在的wwwroot / index.html中的文件。
的blazor.server.js是分隔与客户端应用程序Blazor服务器端Blazor应用的唯一部件。如果我们在index.html文件中提供blazor.webassembly.js而不是blazor.server.js的引用, 那么此应用程序将表现为客户端Blazor应用程序。
Blazor应用程序由ASP.NET Core应用程序托管,该应用程序还设置SignalR端点。由于Blazor应用程序在服务器上运行,因此事件处理逻辑可以直接访问服务器资源和服务。
例如,如果我们想要获取任何数据,我们不再需要发出HTTP请求,而是可以在服务器上配置服务并使用它来检索数据。
服务器端Blazor的优点
服务器端Blazor应用程序为我们提供了许多好处。
由于UI更新是通过SignalR连接处理的,因此我们可以避免不必要的页面刷新。应用下载大小较小,初始应用加载速度更快。Blazor组件可以充分利用服务器功能,例如使用.NET Core兼容API。它还将支持现有的.NET工具,如调试应用程序和JIT编译。由于服务器端Blazor在本机.NET Core进程下运行,而不是在Mono WebAssembly下运行,因此在没有WebAssembly支持的浏览器上也支持它。
服务器端Blazor应用程序也有一些缺点。
由于UI交互涉及SignalR通信,因此在进行网络调用时会增加一个额外步骤,从而导致延迟。应用程序处理多个客户端连接的可扩展性也是一个挑战。
结论
我们已经了解了Blazor 0.5.0版本中引入的最新服务器端Blazor应用程序,并研究了它与普通客户端Blazor应用程序的不同之处。我们还讨论了在客户端blazor应用程序上使用服务器端Blazor应用程序的优缺点。