首页 > 编程语言 >c# 编写 WebAssembly

c# 编写 WebAssembly

时间:2023-06-12 15:33:45浏览次数:38  
标签:WebAssembly Mappings stream c# octet js provider 编写 byte

创建一个.net 7.0类库工程,引用下面的nuget包:

    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="7.0.5" />
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="7.0.5" />

然后把Project sdk改成这样:

<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">

然后c#代码可以这样写:

using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.JSInterop;

namespace WebAssemblyTest
{
    public class Program
    {
        private static IJSRuntime js;
        private static async Task Main(string[] args)
        {
            var builder = WebAssemblyHostBuilder.CreateDefault(args);
            var host = builder.Build();
            js = host.Services.GetRequiredService<IJSRuntime>();
            RunInSeconds();
            await host.RunAsync();
        }

        static async void RunInSeconds()
        {
            while (true)
            {
                await Task.Delay(2000);
                //调用javascript里面的test方法
                await js.InvokeVoidAsync("test", new byte[] { 0x1, 0x2 });
            }
        }

        /// <summary>
        /// 给js调用的函数
        /// </summary>
        /// <param name="i"></param>
        /// <param name="j"></param>
        /// <returns></returns>
        [JSInvokable]
        public static byte[] Add(int i, int j)
        {
            return new byte[] { (byte)i,(byte)j};
        }
    }
}

js代码这样写:

<html lang="en">
<head>
    <meta charset="UTF-8" />
</head>
<body>
</body>
<script src="_framework/blazor.webassembly.js" autostart="false"></script>
<script>
    function test(r) {
        console.log(r);
        alert(r);
    }
    window.onload = async function () {
        await Blazor.start();
        const r = await DotNet.invokeMethodAsync(
            'WebAssemblyTest',//程序集的名字
            'Add',//要调用的标注了[JSInvokable]方法的名字
            666,//若干参数
            333
        );
        console.log(r);
    };
</script>
</html>

注意编译生成的_framework文件夹必须放在web服务器,并且设置mimeType以便前端可以顺利下载

var provider = new FileExtensionContentTypeProvider();
provider.Mappings[".dll"] = "application/octet-stream";//配置添加新的映射关系
provider.Mappings[".gz"] = "application/octet-stream";
provider.Mappings[".dat"] = "application/octet-stream";
provider.Mappings[".blat"] = "application/octet-stream";
provider.Mappings[".pdb"] = "application/octet-stream";
app.UseStaticFiles(new StaticFileOptions
{
    ContentTypeProvider = provider,//应用新的映射关系
});

标签:WebAssembly,Mappings,stream,c#,octet,js,provider,编写,byte
From: https://www.cnblogs.com/IWings/p/17475151.html

相关文章

  • 开发者 vs ChatGPT:开发者如何始终赢得比赛?
    【摘要】在不断发展的技术领域,开发人员在塑造我们生活的数字世界方面发挥着至关重要的作用。他们是架构师、问题解决者和创新软件解决方案背后的创造性思维。虽然像ChatGPT这样的人工智能模型在自然语言处理方面取得了重大进步,但开发人员仍然是软件开发成功的关键。本文探讨了开......
  • C++采用Daemon进行后台程序的部署
    文章目录一、如何采用Daemon进行后台程序的部署1.创建子进程2.终止父进程3.创建新的会话4.改变当前工作目录5.重设文件权限掩码6.关闭不需要的文件描述二.代码示例 一、如何采用Daemon进行后台程序的部署在C++中,如果要让一个程序一直在后台运行并且和......
  • 安装docker及docker常用的镜像命令
    1、安装docker启动docker 输入sudodockerrunhello-world测试是否成功 查看镜像:输入docker images 查看docker版本:docker --version   2、docker常用的镜像命令(1):列出所有运行的容器:docker ps(2)查看所有本地的主机镜像:docker images REPOSITORY:镜......
  • springboot kettle gralde dockerfile 多阶段构建
    dockerfileFROMopenjdk:8-jdk-alpineASTEMP_BUILD_IMAGEENVENVREFRESH_DATE2023-06-1215:00RUNset-eux&&sed-i's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g'/etc/apk/repositoriesRUNapkupdate&&apkadd--no-cacheb......
  • m基于FPGA的基础OFDM调制解调verilog实现,包括IFFT和FFT,包含testbench
    1.算法仿真效果其中Vivado2019.2仿真结果如下   2.算法涉及理论知识概要       正交频分复用(OrthogonalFrequencyDivisionMultiplexing,OFDM)是一种多载波调制技术,其基本原理是将高速数据信号分成多个低速子载波,在每个子载波上调制数据,将所有子载波叠加在一......
  • 源生创新 云享未来|GOTC全球开源技术峰会华为云云原生精彩时刻
    摘要:GOTC全球开源技术峰会在上海张江科学会堂成功举办。本文分享自华为云社区《源生创新云享未来|GOTC全球开源技术峰会华为云云原生精彩时刻》,作者:华为云云原生团队。GOTC全球开源技术峰会在上海张江科学会堂成功举办。作为面向全球开发者的开源技术盛宴,大会以“OpenSource,......
  • 虚拟器关机后如何开启oracle服务
     如果在windows2003中安装了oracle,并且重新启动(非挂起:暂停)了虚拟机那么大概率这台虚拟机在启动完毕后,其中的oracle服务不能正常运作处理方法:打开虚拟机的命令行,并且执行:  sqlplus  /  as  sysdba这一步会登入oracle工业园区的控制中心在控制中心的命令行中执行startup......
  • m基于FPGA的16QAM调制解调通信系统verilog实现,包含testbench,不包含载波同步
    1.算法仿真效果本系统进行了两个平台的开发,分别是: Vivado2019.2 Quartusii18.0+ModelSim-Altera6.6d StarterEdition 其中Vivado2019.2仿真结果如下:  Quartusii18.0+ModelSim-Altera6.6d StarterEdition的测试结果如下: 2.算法涉及理论知识概要   ......
  • VB和c#转换工具
    使用vs的插件代码转换器(VB-C#)-VisualStudioMarketplace安装完以后点击你的程序,就可以方便的进行Vb>c#的来回转换了。 转换完成后重新打开就行,如果产生以下错误:错误CS1555未能找到为Main方法指定的“SubMain”  在应用程序启用对象选择目前的解决方案就可......
  • 【高危】 Apache Kafka 远程代码执行漏洞复现及攻击拦截 (CVE-2023-25194)
    漏洞简介ApacheKafka是一个分布式数据流处理平台,可以实时发布、订阅、存储和处理数据流。KafkaConnect是一种用于在kafka和其他系统之间可扩展、可靠的流式传输数据的工具。攻击者可以利用基于SASLJAAS配置和SASL协议的任意Kafka客户端,对KafkaConnectworker创建或修改连接器......