在 WASI 上運行 .NET 7 應用程序


WASI代表 WebAssembly 系統接口,WASI 讓沙盒化的 WebAssembly 應用程序通過一系列類似 POSIX 的函數訪問底層操作系統,允許獨立於瀏覽器運行 WebAssembly 代碼。這是一個高度實驗性的項目,但同時也是一個非常有趣的項目,並且有可能為行業的大規模編程范式轉變做出貢獻,使 WebAssembly 真正無處不在。

微軟的 Steve Sanderson 最近發布了.NET 的實驗性WASI SDK for .NET的第一個版本,它允許將 .NET 7 和 ASP.NET Core 應用程序 構建為獨立的 WASI 兼容應用程序,並從 WASI 主機運行它們。Steve 的 repo 提供了在 Windows 和 Linux 上使用的簡單步驟.

我們首先要安裝 .NET 7 SDK。最新的是預覽7.0.100-preview.2並不能運行, Steve 提交了有個PR https://github.com/dotnet/aspnetcore/pull/40376 需要 7.0.100-preview.4以上版本修復,運行時方面的相關 PR 可以在https://github.com/dotnet/runtime/pull/67036 找到 ,考慮到所有因素,因為它已經修復,只是不是“正式可用”,所以最好的辦法是從每日構建版本https://github.com/dotnet/installer/blob/main/README.md#installers-and-binaries 安裝適用於對應操作系統的SDK,比如Windows的最新穩定版本是 https://aka.ms/dotnet/7.0.1xx/daily/dotnet-sdk-win-x64.exe,例如,我今天安裝的當前可用版本是7.0.100-preview.4.22201.11。

我們創建一個常規的基本 ASP.NET Core Web 應用程序。

dotnet new web

項目創建后,需要添加以下包引用才能引入實驗 Wasi.Sdk以及 Steve 構建的相應 ASP.NET Core 服務器實現:

< ItemGroup >
    <PackageReference Include="Wasi.AspNetCore.Server.Native" Version="0.1.0" / >
    <PackageReference Include="Wasi.Sdk" Version="0.1.0" / >
  </ItemGroup >

除此之外,main PropertyGroup 下的一個額外屬性 ,一個與您的應用程序使用的端口 在launchSettings.json 相對應的端口:

<WasiRunnerArgs>--tcplisten localhost:5100 --env ASPNETCORE_URLS=http://localhost:5100</WasiRunnerArgs>

由於我們的應用程序需要從 WASI 主機內部偵聽網絡接口,因此需要在生成的代碼中進行額外的更改,即需要添加WasiConnectionListener() 到默認值WebApplication 構建者:

var builder = WebApplication.CreateBuilder(args).UseWasiConnectionListener();

此時應用程序將正確構建,但它還無法運行,因為我們還需要有 WASI 主機可供我們使用。

為了運行這個基於 WASI 的應用程序,我們需要一個 WASI 運行時。一個優秀的輕量級運行時是wasmtime,它恰好是這個實驗使用的那個Wasi.Sdk ,我們需要 它在 PATH 上可用。

image

我們應該能夠運行應用程序:

image

打開瀏覽器訪問 http://localhost:5100/ ,我們現在應該在其中看到我們的 hello world。 以一種非常壯觀的方式,我們現在有一個在 WASI 運行時中作為 WebAssembly 應用程序運行的ASP.NET Core應用程序 ,並且可以從瀏覽器訪問。

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM