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

.NET 6与.NET Framework 4.8桌面应用进程间通信方案咨询

适配.NET Framework 4.8与.NET 6 WPF的简单跨版本通信方案

方案一:gRPC(跨版本通用,性能优异)

gRPC是官方支持的跨平台RPC框架,两端都能无缝集成,适合结构化数据交互。

  • 定义.proto协议文件,统一通信格式:
    syntax = "proto3";
    
    package crossapp;
    
    service DataExchange {
      rpc SyncData (DataRequest) returns (DataResponse);
    }
    
    message DataRequest {
      string tag = 1;
      double variable = 2;
    }
    
    message DataResponse {
      bool success = 1;
      string msg = 2;
    }
    
  • .NET Framework 4.8端(客户端):
    安装Grpc.Tools和Grpc.Core NuGet包,通过.proto生成客户端代码后发起调用:
    var channel = new Channel("localhost:50051", ChannelCredentials.Insecure);
    var client = new DataExchange.DataExchangeClient(channel);
    var resp = client.SyncData(new DataRequest { Tag = "SampleTag", Variable = 123.45 });
    Console.WriteLine($"状态:{resp.Success},消息:{resp.Msg}");
    channel.ShutdownAsync().Wait();
    
  • .NET 6 WPF端(服务端):
    安装Grpc.AspNetCore和Grpc.Tools NuGet包,生成服务端代码并实现逻辑:
    // Program.cs
    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddGrpc();
    var app = builder.Build();
    app.MapGrpcService<DataExchangeServiceImpl>();
    app.Run("http://localhost:50051");
    
    // 服务实现类
    public class DataExchangeServiceImpl : DataExchange.DataExchangeBase
    {
        public override Task<DataResponse> SyncData(DataRequest request, ServerCallContext context)
        {
            // 处理收到的标记与变量,比如更新WPF界面
            Console.WriteLine($"收到标记:{request.Tag},变量值:{request.Variable}");
            return Task.FromResult(new DataResponse { Success = true, Msg = "数据接收成功" });
        }
    }
    

方案二:HTTP API(零额外依赖,快速上手)

利用原生HTTP能力实现通信,无需复杂框架,适合轻量数据交互。

  • .NET 6 WPF端(API服务端):
    // Program.cs
    var builder = WebApplication.CreateBuilder(args);
    var app = builder.Build();
    app.MapPost("/api/data", (DataModel data) =>
    {
        Console.WriteLine($"标记:{data.Tag},变量:{data.Variable}");
        return Results.Ok(new { Success = true, Message = "已接收" });
    });
    app.Run("http://localhost:5000");
    
    public class DataModel
    {
        public string Tag { get; set; }
        public double Variable { get; set; }
    }
    
  • .NET Framework 4.8端(HTTP客户端):
    安装Newtonsoft.Json NuGet包处理JSON序列化,发送请求:
    using (var client = new HttpClient())
    {
        var data = new { Tag = "TestTag", Variable = 67.89 };
        var json = JsonConvert.SerializeObject(data);
        var content = new StringContent(json, Encoding.UTF8, "application/json");
        var resp = client.PostAsync("http://localhost:5000/api/data", content).Result;
        var respJson = resp.Content.ReadAsStringAsync().Result;
        Console.WriteLine(respJson);
    }
    

方案三:命名管道(Windows专属,轻量高效)

仅适用于Windows环境,本地通信延迟极低,适合高频小数据交互。

  • .NET 6 WPF端(管道服务端):
    using (var pipeServer = new NamedPipeServerStream("CrossAppPipe", PipeDirection.InOut))
    {
        pipeServer.WaitForConnection();
        using var reader = new StreamReader(pipeServer);
        using var writer = new StreamWriter(pipeServer) { AutoFlush = true };
        
        string dataStr = reader.ReadLine();
        var data = JsonConvert.DeserializeObject<DataModel>(dataStr);
        Console.WriteLine($"收到:{data.Tag},{data.Variable}");
        writer.WriteLine("{\"Success\":true,\"Message\":\"处理完成\"}");
    }
    
  • .NET Framework 4.8端(管道客户端):
    using (var pipeClient = new NamedPipeClientStream(".", "CrossAppPipe", PipeDirection.InOut))
    {
        pipeClient.Connect();
        using var reader = new StreamReader(pipeClient);
        using var writer = new StreamWriter(pipeClient) { AutoFlush = true };
        
        var data = new DataModel { Tag = "PipeTag", Variable = 100.0 };
        writer.WriteLine(JsonConvert.SerializeObject(data));
        string resp = reader.ReadLine();
        Console.WriteLine(resp);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:45:36