单个 Blazor 项目是否可以同时包含 WebAssembly 部分和服务器端部分?
Can a single Blazor project contains both WebAssembly part and server-side part?
现在 Blazor WebAssembly 已正式发布,我尝试使用模板创建我的第一个 Blazor wasm 项目,但很快发现有一件事与我的预期完全不同。模板中似乎没有 "server" 部分,发布的结果仅包含静态资产(包括所有 .dll 文件)。自然地,我想知道如何访问我的在线数据库?允许客户端直接访问我的数据库听起来是个糟糕的主意(如果可以的话),因为我必须在我的客户端代码中的某个地方包含我的连接字符串……绝对不行!
在 Google 上快速搜索后,似乎每个人都在使用另一台服务器来提供使用 API 的数据。好的,很好,但是如果我可以将我的服务器部分包含在同一个项目中,并且也使用 WebSocket(就像在 Blazor 服务器中一样)而不是 API 与我的客户端通信不是更好吗?这可能吗?
您可以创建 WebAseembly Blazor 托管应用程序。如果您使用 Visual Studio 创建项目,则应选中“托管”复选框。这为您创建了 3 个项目。一个用于 WebAseembly Blazor 应用程序(客户端文件夹),第二个用于托管和服务(服务器文件夹)客户端 Blazor 应用程序,第三个(共享文件夹)用于两个项目之间的共享对象,例如数据库模型.
服务器应用程序还包含控制器 class,用于演示如何从客户端 Blazor 调用 Web Api 端点到服务器 (Web Api)。您可以创建一个专用 Web Api 来访问您的数据库数据。
注意:由于 Blazor 客户端应用程序在浏览器上运行,因此您无法直接访问数据库。您应该对 Web Api 端点使用 HTTP 调用,这些方法的操作可以直接从数据库中检索数据(不推荐),或者通过创建数据库访问服务或存储库间接检索数据。
更新:
客户端和服务器端(或者更准确地说是 web api 端点)之间的主要传输方式是 Fetch Api;也就是说,您需要对 Web Api 执行 HTTP 调用。但是,您可以在客户端应用程序 (Client SignalR) 中使用 SignalR。 See sample here:
您可以创建一个 ASP.NET 核心托管项目,在一个解决方案中为您提供一个 Wasm 客户端和一个 API 服务器。
and communicate with my client-side also using WebSocket .. rather than API?
是的,SignalR 客户端在 .netstandard 2.x 上运行,正是 Blazor/Wasm 所需要的。
您可以轻松地在服务器部分设置一个集线器。
官方文档在这里:Use ASP.NET Core SignalR with Blazor WebAssembly,它们包含一个完整的例子。
现在 Blazor WebAssembly 已正式发布,我尝试使用模板创建我的第一个 Blazor wasm 项目,但很快发现有一件事与我的预期完全不同。模板中似乎没有 "server" 部分,发布的结果仅包含静态资产(包括所有 .dll 文件)。自然地,我想知道如何访问我的在线数据库?允许客户端直接访问我的数据库听起来是个糟糕的主意(如果可以的话),因为我必须在我的客户端代码中的某个地方包含我的连接字符串……绝对不行!
在 Google 上快速搜索后,似乎每个人都在使用另一台服务器来提供使用 API 的数据。好的,很好,但是如果我可以将我的服务器部分包含在同一个项目中,并且也使用 WebSocket(就像在 Blazor 服务器中一样)而不是 API 与我的客户端通信不是更好吗?这可能吗?
您可以创建 WebAseembly Blazor 托管应用程序。如果您使用 Visual Studio 创建项目,则应选中“托管”复选框。这为您创建了 3 个项目。一个用于 WebAseembly Blazor 应用程序(客户端文件夹),第二个用于托管和服务(服务器文件夹)客户端 Blazor 应用程序,第三个(共享文件夹)用于两个项目之间的共享对象,例如数据库模型.
服务器应用程序还包含控制器 class,用于演示如何从客户端 Blazor 调用 Web Api 端点到服务器 (Web Api)。您可以创建一个专用 Web Api 来访问您的数据库数据。
注意:由于 Blazor 客户端应用程序在浏览器上运行,因此您无法直接访问数据库。您应该对 Web Api 端点使用 HTTP 调用,这些方法的操作可以直接从数据库中检索数据(不推荐),或者通过创建数据库访问服务或存储库间接检索数据。
更新:
客户端和服务器端(或者更准确地说是 web api 端点)之间的主要传输方式是 Fetch Api;也就是说,您需要对 Web Api 执行 HTTP 调用。但是,您可以在客户端应用程序 (Client SignalR) 中使用 SignalR。 See sample here:
您可以创建一个 ASP.NET 核心托管项目,在一个解决方案中为您提供一个 Wasm 客户端和一个 API 服务器。
and communicate with my client-side also using WebSocket .. rather than API?
是的,SignalR 客户端在 .netstandard 2.x 上运行,正是 Blazor/Wasm 所需要的。
您可以轻松地在服务器部分设置一个集线器。
官方文档在这里:Use ASP.NET Core SignalR with Blazor WebAssembly,它们包含一个完整的例子。