You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Uno Platform WebAssembly创建GrpcChannel报NullReferenceException异常

问题背景

我正在开发使用gRPC-Web的Uno Platform示例项目,参考相关教程先搭建了集成gRPC-Web天气服务的Blazor应用,又参照官方示例新增了计数器服务,确认Blazor端所有功能运行正常后,新增Uno Platform WebAssembly应用替换原有Blazor客户端。

故障现象

创建GrpcChannel实例时,应用抛出System.NullReferenceException空引用异常,使用的通道创建代码和Blazor端完全一致,代码片段如下:

var baseUri = "https://localhost:44366";
var channel = GrpcChannel.ForAddress(baseUri, new GrpcChannelOptions());

解决方案

该空引用是Uno Platform WebAssembly环境未内置gRPC-Web默认适配层导致的:Blazor WebAssembly默认注入了gRPC-Web专用的HttpHandler配置,Uno WASM没有该默认逻辑,直接初始化空配置的GrpcChannelOptions就会触发空引用,按以下步骤修复即可:

  • 先核对项目依赖:给Uno WASM项目单独安装Grpc.Net.Client.Web稳定版NuGet包,不要仅依赖共享项目的包引用,同时将Uno.Wasm.Bootstrap升级到3.10及以上版本,避免低版本的HttpHandler兼容性问题。
  • 显式指定gRPC-Web专用处理器初始化通道,替换原有代码为:
    var baseUri = "https://localhost:44366";
    var httpHandler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler());
    var channel = GrpcChannel.ForAddress(baseUri, new GrpcChannelOptions
    {
        HttpHandler = httpHandler
    });
    
  • 本地调试场景下,在Uno WASM项目的启动入口添加开发环境配置,规避本地HTTPS证书校验异常触发的隐式空引用(生产环境务必移除该配置):
    AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
    
  • 检查IL裁剪配置,在Uno WASM项目文件中添加gRPC相关程序集的保留规则,防止发布时Linker误删依赖类型:
    <ItemGroup>
      <TrimmerRootAssembly Include="Grpc.Net.Client" />
      <TrimmerRootAssembly Include="Grpc.Net.Client.Web" />
      <TrimmerRootAssembly Include="Google.Protobuf" />
    </ItemGroup>
    

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:27:17