Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Совет
Это фрагмент из электронной книги для разработчиков ASP NET веб-формы для Azure, Blazor доступных в документации .NET или в виде бесплатного скачиваемого PDF-файла, который можно читать в автономном режиме.
Приложения Blazor можно размещать одним из следующих способов:
- на стороне клиента в браузере в WebAssembly;
- на стороне сервера в приложении ASP.NET Core.
BlazorWebAssembly Приложения
BlazorWebAssembly приложения выполняются непосредственно в браузере WebAssemblyв среде выполнения .NET. BlazorWebAssembly приложения работают так же, как интерфейсные платформы JavaScript, такие как Angular или React. Но вместо JavaScript вы пишете на C#. Среда выполнения .NET загружается вместе с приложением вместе со сборкой приложения и всеми необходимыми зависимостями. Не требуются никакие браузерные расширения или подключаемые модули.
Загруженные сборки являются обычными сборками .NET, как и в любом другом приложении .NET. Так как среда выполнения поддерживает .NET Standard, вы можете использовать существующие библиотеки .NET Standard с BlazorWebAssembly приложением. Однако эти сборки по-прежнему будут выполняться в песочнице безопасности браузера. Некоторые функции могут вызывать исключение PlatformNotSupportedException, например при попытке доступа к файловой системе или открытии произвольных сетевых подключений.
При загрузке приложения среда выполнения .NET запускается и указывает на сборку приложения. Выполняется логика запуска приложения, и корневые компоненты преобразуются для просмотра. Blazor вычисляет обновления пользовательского интерфейса на основе выведенных выходных данных компонентов. Затем применяются обновления модели DOM.
BlazorWebAssembly приложения выполняются исключительно на стороне клиента. Такие приложения можно развертывать в статических решениях размещения сайтов, таких как страницы GitHub или Azure Static Website Hosting. .NET на сервере вообще не требуется. Для создания глубинных ссылок на части приложения обычно требуется решение маршрутизации на сервере. Это решение маршрутизации перенаправляет запросы в корневую папку приложения. Например, это перенаправление можно обрабатывать с помощью правил переопределения URL-адресов в службах IIS.
Чтобы получить все преимущества Blazor и полнотекстовую веб-разработку .NET, разместите приложение BlazorWebAssembly с помощью ASP.NET Core. Используя .NET как на клиенте, так и на сервере, вы можете легко обмениваться кодом и создавать приложения с помощью единого согласованного набора языков, платформ и средств. Blazor предоставляет удобные шаблоны для настройки решения, содержащего как приложение, так BlazorWebAssembly и проект узла ASP.NET Core. После сборки решения статические файлы сборки из приложения Blazor размещаются в приложении ASP.NET Core с уже настроенной резервной маршрутизацией.
Приложения Blazor Server
Вспомните из обсуждения архитектуры Blazor, что компоненты Blazor отображают свои выходные данные в промежуточной абстракции, называемой RenderTree
. Затем платформа Blazor сравнивает то, что было выведено, с тем, что было выведено ранее. Различия применяются к модели DOM. Компоненты Blazor отделены от того, как применяется их преобразованный для просмотра вывод. Следовательно, сами компоненты не должны выполняться в том же процессе, что и процесс обновления пользовательского интерфейса. Фактически им даже не нужно работать на одной и той же машине.
В приложениях Blazor Server компоненты запускаются на сервере, а не в браузере на стороне клиента. События пользовательского интерфейса, возникающие в браузере, отправляются на сервер через соединение в реальном времени. События направляются в соответствующие экземпляры компонентов. Компоненты преобразуются для просмотра, затем вычисленное различие пользовательского интерфейса сериализуется и отправляется в браузер, где оно применяется к модели DOM.
Если вы использовали технологию AJAX ASP.NET и элемент управления UpdatePanel, то модель размещения Blazor Server может показаться вам знакомой. Элемент управления UpdatePanel
обрабатывает применение частичных обновлений страницы в ответ на возникшие события на странице. При запуске UpdatePanel
запрашивает частичное обновление, а затем применяет его без необходимости обновления страницы. Состояние пользовательского интерфейса управляется с помощью ViewState
. Приложения Blazor Server немного отличаются тем, что приложению требуется активное подключение к клиенту. Кроме того, все состояния пользовательского интерфейса поддерживаются на сервере. Помимо этих различий, в остальном эти две модели концептуально аналогичны.
Выбор правильной модели размещения Blazor
Как описано в документации по модели размещенияBlazor, в различных моделях размещения Blazor существуют разные компромиссы.
Модель BlazorWebAssembly размещения имеет следующие преимущества:
- Отсутствует зависимость от .NET на стороне сервера. Приложение полностью работает после загрузки на клиент.
- Ресурсы и возможности клиента используются полностью.
- Рабочая нагрузка переносится с сервера на клиент.
- Для размещения приложения не требуется веб-сервер ASP.NET Core. Возможны сценарии бессерверного развертывания (например, обслуживание приложения из CDN).
Недостатки BlazorWebAssembly модели размещения:
- Приложение ограничено возможностями браузера.
- Требуется соответствующее клиентское оборудование и программное обеспечение (например, поддержка WebAssembly).
- Больше размер скачивания и время загрузки приложения.
- Поддержка среды выполнения .NET и инструментария менее развита. Например, существуют ограничения поддержки и отладки .NET Standard.
Соответственно, модель размещения Blazor Server предлагает следующие преимущества.
- Размер загрузки намного меньше, чем у клиентского приложения, и приложение загружается намного быстрее.
- Приложение полностью использует возможности сервера, в том числе любые API, совместимые с .NET.
- .NET на сервере используется для запуска приложения, поэтому существующие инструменты .NET, такие как отладка, работают должным образом.
- Поддерживаются тонкие клиенты. Например, серверные приложения работают с браузерами, которые не поддерживают WebAssembly, и на устройствах с ограниченными ресурсами.
- База кода приложения .NET/C#, включая код компонента приложения, не отправляется клиентам.
Модель размещения Blazor Server имеет следующие недостатки.
- Более высокая задержка пользовательского интерфейса. Каждое взаимодействие с пользователем включает передачу данных по сети.
- Автономная работа не поддерживается. Если происходит сбой клиентского подключения, приложение перестает работать.
- Масштабируемость сложна для приложений со многими пользователями. Сервер должен управлять несколькими клиентскими подключениями и обрабатывать состояние клиента.
- Для обслуживания приложения требуется сервер ASP.NET Core. Сценарии бессерверного развертывания невозможны. Например, вы не можете обслуживать приложение из CDN.
Предыдущий список компромиссов может показаться пугающим, но вы можете изменить вашу модель размещения позже. Независимо от выбранной модели размещения Blazor, модель компонентов остается неизменной. В принципе, одни и те же компоненты могут использоваться с любой моделью размещения. Код вашего приложения не меняется; однако рекомендуется вводить абстракции, чтобы ваши компоненты оставались независимыми от модели размещения. Абстракции облегчают принятие вашим приложением другой модели размещения.
Развертывание приложения
Приложения ASP.NET Web Forms обычно размещаются в службах IIS в кластере или на компьютере Windows Server. Для приложений Blazor также существуют следующие возможности.
- Размещение в службах IIS в виде статических файлов или приложения ASP.NET Core.
- Использование гибкости ASP.NET Core для размещения на различных платформах и в серверных инфраструктурах. Например, вы можете разместить приложение Blazor с помощью Nginx или Apache в Linux. Дополнительные сведения о публикации и развертывании Blazor приложений см. в Blazorдокументации по размещению и развертыванию .
В следующем разделе мы рассмотрим, как настроены проекты для BlazorWebAssembly приложений сервера.Blazor