ServiceStack:添加 Blazor 支持?

Posted

技术标签:

【中文标题】ServiceStack:添加 Blazor 支持?【英文标题】:ServiceStack: Adding Blazor support? 【发布时间】:2019-10-16 14:37:19 【问题描述】:

我尝试将 ServiceStack 引用添加到客户端 Blazor 项目,但在通过 NuGet 添加 ServiceStack.HttpClient 后遇到问题。

目前,VS2019 会告诉我:

找不到导出类型“System.Threading”的声明

当ask/look around 时,他们会说:

Blazor 是使用 mono-wasm 作为基础 .NET 框架构建的 实施,在这种情况下,我相信这是一个缺失的方法 这就是问题所在。

目前 Mono WASM 不支持线程;检查回购 https://github.com/lrz/mono-wasm-mono了解更多信息

我理解正确吗:

ServiceStack 需要System.Threading WebAssembly 因此 Blazor 不支持对 System.Threading 的引用 意味着 ServiceStack 不能在 Blazor 应用中使用

【问题讨论】:

【参考方案1】:

ServiceStack 的 Blazor WASM 模板由 Sebastian Faltonihttps://github.com/nukedbit/blazor-wasm-servicestack 维护

可以用x dotnet tool安装:

$ dotnet tool install -g x

并通过以下方式创建:

$ x new nukedbit/blazor-wasm-servicestack ProjectName

或者对于免安装的替代方案,使用 ServiceStack 的在线项目模板生成器: https://servicestack.net/start#community

它包括与可在以下位置创建的 Blazor 服务客户端的集成:

var client =  BlazorClient.Create("https://localhost:5001")

它当前返回一个预配置的 JsonHttpClient,它删除了 Blazor WASM 不支持的所有 HttpClient 功能。随着时间的推移,我们将包含更多 Blazor 支持的功能。

@Issac 关于 ServiceStack 使用 Web Sockets 的说法不正确,ServiceStack 在其任何库中都不使用 Web Sockets,BlazorClient 是使用 Blazor WASM 支持的 .NET HttpClient 的服务客户端。

【讨论】:

感谢神话。那么,如果我正确阅读了您的答案,您将在正式发布时查看 Blazor 支持吗? @Ted Right,将在 Blazor 正式发布后研究 JSON 服务客户端。【参考方案2】:

@泰德,

Blazor 不在多线程环境中运行。 Blazor (mono-wasm) 在同一个 javascript 沙箱中运行,在同一个 UI 线程中。没有多线程,没有并发或并行编程。正如我之前所说,我从未听说过 ServiceStack,但我猜 ServiceStack.HttpClient 不能在 Blazor 客户端中使用,因为“Blazor HttpClient”是基于 HttpMessageHandler 的,并且它适合作为 Ajax 代理工作;也就是说,HttpClient 通过 JavaScript Fetch Web API 与后端通信,而我相信 ServiceStack 使用 Web 套接字执行传统的 http 客户端调用,而 Blazor (mono-wasm) 不支持这种调用。在 Asp.Net Core 5.0 中,预计 Blazor 客户端将支持 Web 套接字,之后 mono 将被替换。

不,ServiceStack 不能在 Blazor 应用中使用

希望对你有帮助……

【讨论】:

以上是关于ServiceStack:添加 Blazor 支持?的主要内容,如果未能解决你的问题,请参考以下文章

ServiceStack 是不是支持二进制响应?

如何在 ServiceStack 中添加 protobuf

ServiceStack:VS 2012 添加服务参考

Blazor University (24)路由 —— 可选路由参数

关于ServiceStack.Redis的一些问题

Blazor数据绑定