Какая модель хостинга для приложения Blazor с динамическим пользовательским интерфейсом взаимодействует с удаленным SQL Server? - PullRequest
1 голос
/ 19 июня 2019

Если вы хотите портировать «устаревшее» приложение ASP.NET, которое извлекает данные из удаленного экземпляра SQL Server с помощью System.Data.SqlCient методов, выполняющихся в выделенном коде HttpHandler (данные возвращаются с сервера jsonified и внедряется в виджеты пользовательского интерфейса, например, kendoUI), какая модель хостинга Blazor подходит?

  Blazor server-side  
  Blazor ASP.NET Core Hosted 
  Blazor client-side

Исходя из описания, что Visual Studio 2019 Preview предлагает Blazor (server-side):

... Этот шаблон можно использовать для веб-приложений с богатыми динамическими пользовательскими интерфейсами ...

Blazor (server-side) кажется правильным выбором.

Но дает ли SignalR способ использовать Blazor (ASP.NET Core hosted) вместо этого? Visual Studio говорит, что эта модель хостинга «работает на WebAssembly и размещается на сервере ASP.NET Core», но я точно не знаю, что это значит. Где работает WebAssembly? Клиент? Сервер? Оба места?

Может ли SignalR вместе с моделью Blazor (ASP.NET Core hosted) использоваться для создания конвейера от серверной WebAssembly до клиентской WebAssembly, что устраняет необходимость в HttpHandler?

Описание SignalR здесь на StackOverflow предполагает, что он почти волшебен в своих возможностях:

ASP.NET SignalR ... делает невероятно простым для добавления веб-функциональности в реальном времени в ваши приложения ... чтобы ваш серверный код передавал контент подключенным клиентам, как это происходит, в режиме реального времени.
[мой акцент]

Если на мгновение игнорировать фразу «как это происходит в реальном времени» как не связанную с вопросом, можно ли использовать тот же конвейер для передачи любого (небольшого) набора данных «подключенному клиенту»? Кстати, это традиционное интранет-приложение, о котором я спрашиваю, с несколькими десятками пользователей.

Ответы [ 2 ]

2 голосов
/ 19 июня 2019

Слишком много вопросов для одного «Вопроса»

Вопрос: Но дает ли SignalR способ использовать Blazor (размещенное на ASP.NET Core) вместо этого?

Ответ: В другихслова, вы задаетесь вопросом, можно ли использовать SingleR из клиентской части Blazor, верно? Ответ - да ...

Вопрос: Visual Studio говорит, что эта модель хостинга "работает на WebAssembly и размещается наСервер ASP.NET Core ", но я не уверен, что именно это означает. Где работает WebAssembly? Клиент? Сервер? Оба места?

Ответ: Клиентский Blazor выполняется в браузере клиента.Клиентская сторона Blazor выполняется во время выполнения моно, которое компилируется в WebAssembly. WebAssembly не может работать на сервере. Он предназначен для работы в Интернете вместе с JavaScript. Клиентская сторона Blazor размещается на сервере и являетсяПроект Asp.Net Core.

Вопрос: Можно ли использовать SignalR вместе с моделью Blazor (размещенной на ASP.NET Core) для создания конвейера от серверной WebAssembly к tВеб-сборка на стороне клиента, которая устраняет необходимость в HttpHandler?

Ответ: Нет такой веб-сборки на стороне сервера для животных.Вы можете использовать Web Api для обеспечения связи между клиентской частью Blazor и сервером.В этом случае вам придется использовать сервис HttpClient.Примечание: вы также можете использовать SignleR для такой связи в реальном времени.

Что такое HttpHandler?Контроллер веб-API - это HttpHandler ... действие (конечная точка маршрутизации) в таком контроллере - это HttpHandler ... Имена не важны.Вопрос в том, какую проблему вы хотите решить.

Мне кажется, что вам лучше создать свое приложение с помощью серверной версии Blazor, в этом случае вы можете использовать службу HttpClient или, возможно, не использовать HttpClient ввсе, и вместо этого определите службу, которая передает данные в браузер, поскольку, в конце концов, ваш код выполняется на сервере, а данные передаются в браузер через SignleR.

ОБНОВЛЕНИЕ :

Вопрос: @Isaac: Спасибо за решение вопроса (ов) :) Мой основной вопрос заключается в том, способен ли серверный код в веб-приложении (каким-либо образом) обновлять компоненты пользовательского интерфейса напрямую (возможно)через некоторый механизм RPC через SignalR, который устранял бы необходимость выставлять конечную точку маршрутизации клиенту и устранял Ajax.Я думал, что WASM может работать и на стороне сервера.Я имею в виду приложения для интрасети, а не интернет-приложения, с точки зрения количества клиентов (относительно немного).

Ответ: закройте страницу в браузере с помощью ввода [type = text] и кнопки управления "Нажми на меня".Опять же, эта страница работает в браузере.Это может быть Blazor на стороне клиента, но это также может быть Blazor на стороне сервера.Я знаю секрет, и я собираюсь рассказать его вам.Наше дорогое приложение - Blazor на стороне сервера .Теперь введите значение в поле ввода и нажмите кнопку «Нажмите меня».Сразу после того, как вы нажали кнопку, SignleR передаст введенные вами данные, а также все детали, такие как тип события и т. Д. Короче говоря, событие выполняется на сервере.Нет Ajax, с вашей стороны ... Как работает SignleR, здесь неважно.Важно понимать, что ваш код выполняется на сервере, а не на клиенте, как это происходит при использовании Blazor на стороне клиента (WebAssembly).

Как я уже говорил выше, ваш кодвыполняется на сервере, и, таким образом, вам не нужно предоставлять конечные точки маршрутизации клиенту.Вы можете просто определить сервис в своем приложении, добавить его в контейнер DI и использовать его для вызова методов, которые делают что-то интересное ...

НОВОЕ ОБНОВЛЕНИЕ:

Вопрос: Спасибо.Что делать, если щелчок по кнопке пользователя отправляет текст в текстовом поле на сервер, который выполняет запрос к базе данных, используя текстовое значение в качестве поискового термина, а затем серверу необходимо отправить набор данных обратно клиенту для заполнениясетка?Вызывает ли сервер (удаленно) метод на стороне клиента и предоставляет данные в качестве аргумента для метода на стороне клиента?

Из вашего вопроса не ясно, к какому способу исполнения вы относитесь.Однако описанный здесь поток выполнения может относиться как к Blazor на стороне клиента, так и к Blazor на стороне сервера.

Когда пользователь нажимает кнопку, запускается обработчик событий, определенный в клиентском приложении и запущенный в браузере (обратите внимание, что это может быть Blazor на стороне клиента или Blazor на стороне сервера).Этот обработчик может использовать внедренный HttpClient для отправки содержимого текстового поля и ждать, если вам повезет, ответа, содержащего искомые данные.Я думаю, вы знаете, как использовать объект HttpClient, верно?Вы отправляете запрос, а затем получаете ответ.Извлеченные данные могут быть назначены локальной переменной и привязаны, скажем, к элементу таблицы, который может отображать данные в сетке.

Надеюсь, вы понимаете, что http-запрос отправлен на класс контроллера, определенный на сервере;то есть вы используете Web Api.

Этот поток событий, опять же, идентичен как на стороне клиента, так и на стороне сервера.

Но, поскольку ваше приложение выполняется на сервере, когда вы используете серверную версию Blazor, вам не нужно использовать Web Api, и вместо этого вы можете определить службу, которая возвращает необходимые данные.Обратите внимание, что запрос данных, запрос базы данных, возврат данных, выполнение кода, рендеринг html и т. Д. Все происходят на сервере, в конце которого метод SignleR отправляет HTML-различия в клиентский браузер для отображения.

Надеюсь, это поможет ...

0 голосов
/ 20 июня 2019

, который извлекает данные из удаленного экземпляра SQL Server с помощью System.Data.SqlCient

Эта часть должна обязательно выполняться на сервере.В браузере нет SqlClient.
Запуск Blazor на стороне сервера должен работать.Вам не нужно иметь дело с SignalR напрямую.

, работающий в коде HttpHandler (данные, возвращаемые с сервера, получают jsonified и ...

Это звучит так, как будто бы оно подходит для модели Hosted: сервер API, предоставляющий конечные точки клиенту. Это оставит вас с лучшей архитектурой, но это может потребовать больше усилий.

...