关于 webassebmly Blazor RPC 调用

离开了园子很久很久了

疫情期间,没有办法出差,正好当前时间是自己规划的查漏补缺时间,把缺少的Web模块的统计分析图表加进去

Webassembly 老早是听说了,但由于项目的原因,也一直没有精力去关注,倒是 netcore3.1期待了很久,虽然最后测试了一下,自己需要的核心接口还没有添加进去,但是Webassembly 与 Blazor 还是给我带来了惊喜。

1、Webassembly 实现了 netstandard 的接口。我的业务逻辑层的实体类dll,可以不作任何修改,直接应用于Browser的Webassembly。去年基于tekerik的KendoUI差不多整了个前端的应用框架,但是需要定义传输实体类,虽然可以通过工具生成js,绑定、查询、提交之类,但是毕竟要重新生成,修改了一个地方,js也要跟着修改,工作量还是非常大的,js与C#毕竟还是有很大的差异,人的培训又是个很大的问题。有了webassembly 后,dll可以直接使用,不需要生成一大堆的js,代码量与工作量直线下降,后端人员可以写前端了。可能从效果上来说,还达不到js的展现之类,由于我们的软件是应用于企业内部,优点是大大超越不足。

2、RPC!!!实现了webassembly的RPC,这个大概花了不到2周的时间进行移植与测试,与我当前用的后台可以无缝对接。我后台的服务也可以不作任何的修改,browser webassembly客户端可以直接以RPC方式调用,这更是惊喜中的惊喜呀。这样,我的服务层通过asp.netcore公开出去后,xamarin app、browser、desktop可以采用统一的服务接口。由于原来主要的工作是在app和desktop程序上面,而且app与desktop使用了非常相似的代码风格与样式,统一的集中权限管理。webassembly blzaor 带给我们完全一致的风格,统一了app、browser、desktop。我们的RPC调用传输部分,用的是自行改版后的protobuf,已经用了很多年了,效率、稳定性都经过了N多项目的检验。曾经尝试用protobuf.js,最终失败,后来就一直放下了。如果不能够实现从browser直接调用服务,就要架个服务的中转,把protobuf的调用再转换成json。项目里面,那么多的接品,这个转换,也是个非庞大的工作量,而且是专门用于web的,app与desktop 的RPC调用,还是基于原来的protobuf。

@page "/"
@using Demo.Shared
@using EES.Common

<h1>Hello, world!</h1>

Welcome to your new app.

<p>Current: @value</p>

@code {
    string value;

    protected override async Task OnInitializedAsync()
    {
        try
        {
            User user = await Factory.getProxy<HelloService>().getUserAsync("Say");
            value = user.UserCode;
        }
        catch (Exception ex)
        {
            value = ex.Message;
        }
    }
}

View Code

大家看看这个调用方式,与写普通的远程调用有什么差异吗?完全没有。这也是RPC给我带来的惊喜中的惊喜,在browser可以直接调用后台服务。

再看看后台的服务代码。

public User getUser(string name)
        {
            User u = Factory.Create<User>();
            u.Age = new Random().Next(0, 120);
            u.UserCode = string.Format("{0}-{1:yyyy-MM-dd HH:mm:ss.fff}", name, DateTime.Now);
            return u;
        }

View Code

3、Blazor 应该说是为了实现webassembly而打造了,有了webassembly和RPC,加了Blazor的双向绑定,app与desktop 的做法,在web上面,可以差不多用一样的风格实现了,至少对于业务系统可以是这样。

由于在测试的时候CORS出现了一些问题,需要等上一些时间再把Demo传上来

(0)

相关推荐

  • C#+web=? 微软Blazor

    C#开发可以用Blazor在今后写前端渲染的网页了!   - C#(C sharp)是什么? C#是微软公司发布的一种面向对象的.运行于.NET Framework和.NET Core(完全开源,跨平 ...

  • WebAssembly's post

    People have a misconception about WebAssembly. They think that the WebAssembly that landed in browse ...

  • 在一个控制台中输出多个命令

    我正在努力改进我的编程环境,现在我需要在一个控制台中输出多个命令(coffeescript/sass 编译和单元测试).这可以通过以下方式实现连接命令&: karma start & ...

  • Blazor 基础入门

    dotNET跨平台 今天 以下文章来源于amazingdotnet ,作者WeihanLi Blazor 基础知识 Intro Blazor 是微软在 .NET 里推出的一个 WEB 客户端 UI 交 ...

  • 去中心化计算的未来:通过 RPC 从微服务过渡到 WASM

    在另外一篇文章<区块链.硬件与面向服务的架构,WASM 即将迎来大爆发?>,里面有绝佳的浏览器内的 WASM 应用程序示例,并辅以了对WebAssembly(Wasm)的详细解释. 但正如 ...

  • APP为什么用JSON协议与服务端交互:序列化相关知识

    在设计或重构系统的过程中,特别是在设计分布式.大数据量系统里面,序列化选型是一个重要环节,因为序列化协议影响系统的通用性.健壮性.安全性,是否易于调试.是否便于扩展. 序列化分理论和实践部分,理论部分 ...

  • ASP.NET Core Blazor Webassembly 之 渐进式应用(PWA)

    Blazor支持渐进式应用开发也就是PWA.使用PWA模式可以使得web应用有原生应用般的体验. 什么是PWA PWA应用是指那些使用指定技术和标准模式来开发的web应用,这将同时赋予它们web应用和 ...

  • 分布式事物 - 基于RPC调用 - TCC模式

    前提 前端业务(主服务)可以以同步或异步调用TCC框架,或者TCC框架本身就是同步异步兼备的. 假定TCC框架拥有断电后的自动恢复能力.同时,在下游业务出现无限失败的情况下,也会进行无限的重试,以达到 ...

  • 分布式事物 - 基于RPC调用 - 补偿模式

    前提 所有服务均有独立的事物管理机制,相互间没有任何关联. 所有业务接口都有对应的补偿方法,用于将已经更新的数据还原到上一次的状态. 本次实例为同步业务,理想状态下,只有全部成功或全部失败两种情况. ...

  • Blazor Dapr K8s微服务之服务调用

    目录 1.1  Dapr环境配置 1.1.1        在开发机安装Docker Desktop并启用Kubernetes 1.1.2        在开发机安装Dapr Cli 1.1.3    ...

  • Python如何调用RPC接口

    Python如何调用RPC接口是很多Python开发工程师比较关心的问题,本篇文章好程序员Python培训小编就给喜欢Python开发的小伙伴们分享一下Python调用RPC接口的详解,文中有详细的代 ...

  • 微服务调用为啥用RPC框架,http不更简单吗?

    基本都是复制黏贴,全是一个答案,没看到有真正深入思考过的答案,还是我来说说吧. 前言:其实计算机里面的很多概念都是来源于现实世界的,通过现实里面具体的例子来理解RPC.A:代表一栋大楼(相当于一个大的 ...

  • Itrace跟踪进程调用库函数参数选项-linux系统学习心得

    Itrace能够跟踪进程的库函数调用,它会显现出调用了哪个库函数,而strace则是跟踪进程的每个系统调用.随着Linux运维技术的发展,各企业对于Linux运维工程师人才的需求也是逐渐增加,学习Li ...

  • 一行代码调用您的“黑盒子因子”-如何用真格量化读取策略附件Excel

    部分量化交易者觉得一些内容不适合写到策略代码中,他们更希望从策略附件中调用这些内容(比如一些事先由"高深莫测的AI"选定的交易标的列表.一些平台还未提供的数据或其他各种" ...

  • 充分调用你的每一分人脉的 11 种方法

    2021年第50本书 相比于费劲心力地结交陌生人,从我们现有的关系出发,深度挖掘人脉,是更省力,更高效,更可执行的动作. 直播时间:5月2日周日晚上8点 主题:未定(欢迎大家在评论里留言) 直播地址: ...