Signalr Blazor应用程序的哪个托管模型具有与远程SQL Server对话的动态UI?

Signalr Blazor应用程序的哪个托管模型具有与远程SQL Server对话的动态UI?,signalr,webassembly,blazor,asp.net-core-signalr,blazor-server-side,Signalr,Webassembly,Blazor,Asp.net Core Signalr,Blazor Server Side,如果您想移植一个“遗留”ASP.NET应用程序,该应用程序通过System.data.SqlCient方法从远程SQL Server实例获取数据,该方法运行在HttpHandler的代码后面(从服务器返回的数据被jsonified并注入UI小部件,例如kendoUI),什么是合适的Blazor托管模型 Blazor server-side Blazor ASP.NET Core Hosted Blazor client-side 从Visual Studio 2019 Pre

如果您想移植一个“遗留”ASP.NET应用程序,该应用程序通过
System.data.SqlCient
方法从远程SQL Server实例获取数据,该方法运行在
HttpHandler
的代码后面(从服务器返回的数据被jsonified并注入UI小部件,例如kendoUI),什么是合适的Blazor托管模型

  Blazor server-side  
  Blazor ASP.NET Core Hosted 
  Blazor client-side
从Visual Studio 2019 Preview提供的
Blazor(服务器端)
的描述来看:

。。。此模板可用于具有丰富动态用户界面的web应用程序

Blazor(服务器端)
似乎是正确的选择

但是
signar
是否提供了一种使用
Blazor(ASP.NET核心托管)
的方法?VisualStudio说这种托管模型“运行在WebAssembly上,托管在ASP.NET核心服务器上”,但我不确定这到底意味着什么。WebAssembly在哪里运行?客户服务器?两个地方

可以使用
signar
Blazor(ASP.NET核心托管)
模型来创建从服务器端
WebAssembly
到客户端
WebAssembly
的管道,从而消除对
HttpHandler
的需求吗

StackOverflow上对Signal的描述表明,它的功能几乎是神奇的:

ASP.NET信号器。。。使向应用程序中添加实时web功能变得非常简单……让服务器端代码实时将内容推送到连接的客户端。
[我的重点]


暂时忽略与问题无关的“实时”短语,是否可以使用相同的管道将任何(较小的)数据集推送到“连接的客户端”?顺便说一句,这是一个遗留的“intranet”应用程序,只有几十个用户。

一个“问题”就有太多问题了

问题:但SignalR是否为您提供了一种使用Blazor(ASP.NETCore托管)的方法

答:换句话说,您的问题是SingleR是否可以从客户端Blazor使用,对吗?答案是肯定的

问题:Visual Studio说此托管模型“运行在WebAssembly上,托管在ASP.NET核心服务器上”,但我不确定这到底是什么意思。WebAssembly运行在哪里?客户端?服务器?两个位置

答:客户端Blazor在客户端浏览器上执行。Blazor客户端由编译到WebAssembly的mono运行时执行。WebAssembly不能在服务器上运行。它设计为与JavaScript一起在web上运行。Blazor客户端托管在服务器上,是Asp.Net核心项目

问题:signar能否与Blazor(ASP.NET Core hosted)模型一起用于创建从服务器端WebAssembly到客户端WebAssembly的管道,从而消除对HttpHandler的需求

答:没有这样的服务器端WebAssembly。您可以使用Web Api来启用Blazor客户端和服务器之间的通信。在这种情况下,您必须使用HttpClient服务。 注意:您也可以使用SignleR进行此类实时通信

什么是HttpHandler?web Api控制器是HttpHandler…此类控制器中的操作(路由端点)是HttpHandler…名称并不重要。问题是您希望解决什么问题

在我看来,您最好使用服务器端Blazor创建应用程序,在这种情况下,您可以使用HttpClient服务,或者根本不使用HttpClient,而是定义一个将数据推送到浏览器的服务,毕竟,您的代码在服务器上执行,数据通过SignleR推送到浏览器

更新


问题:@Isaac:感谢您解答这个问题:)我的基本问题是,在Blazor web应用程序中,服务器端代码是否(不知何故)是能够直接更新UI组件,可能是通过信号器上的某种RPC机制,这将消除向客户端公开路由端点的需要,并消除Ajax。我认为WASM也可以运行服务器端。就客户端数量而言,我考虑的是intranet应用程序,而不是internet应用程序(相对较少)

回答:在浏览器中用输入[type=text]和按钮控件“Click me”(单击我)变出一个页面。同样,此页正在浏览器中运行。它可能是客户端Blazor,但也可能是服务器端Blazor。我知道这个秘密,我要告诉你。我们亲爱的应用程序是Blazor服务器端。现在在输入框中输入一个值并点击“单击我”按钮。单击按钮后,SignleR立即传递您输入的数据以及事件类型等每个细节。简而言之,事件在服务器上执行。没有Ajax,就你而言。。。SignleR的工作方式在这里并不重要。要理解代码是在服务器上执行的,而不是在客户机上执行的,使用客户端Blazor(WebAssembly)时就会发生这种情况,这一点至关重要

如上所述,您的代码是在服务器上执行的,因此您不必向客户机公开路由端点。您只需在应用程序中定义一个服务,将其注入DI容器,并使用它调用对其执行有趣操作的方法

新更新:


问题:谢谢。如果用户的按钮单击将文本框中的文本发送到服务器,服务器使用文本值作为搜索词进行数据库查询,然后服务器需要将数据集发送回客户端以填充网格,该怎么办?服务器是否(远程)调用客户端方法并将数据作为参数提供给客户端方法

从你的问题中不清楚你所涉及的是哪种执行方式。然而,这里描述的执行流程可能与客户端Bl和客户端Bl都相关