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

.NET Core中替代WCF的方案是什么?如何暴露Add方法给控制台应用?

在.NET Core中暴露类库函数的几种方案(替代WCF)

嘿,我太懂你从WCF转.NET Core时的迷茫了!其实完全没必要非得做RESTful服务,根据你的需求(把类库的Add函数暴露给控制台应用),有几个更合适的方案,我给你详细说说:

1. 直接引用类库(进程内调用,最简单)

如果你的控制台应用和类库在同一个解决方案里,这是最直接的方式——根本不需要任何服务端/客户端的复杂配置,直接引用类库后实例化调用就行。

类库代码示例

namespace MathLibrary
{
    public class Calculator
    {
        public int Add(int x, int y)
        {
            return x + y;
        }
    }
}

控制台应用调用代码

using MathLibrary;

// 直接实例化类库中的类调用方法
var calculator = new Calculator();
int result = calculator.Add(3, 5);
Console.WriteLine($"Add结果:{result}");

这种方式适合同一进程内的调用,完全没有额外开销,是最省心的选择。

2. 使用gRPC(跨进程/跨平台的WCF替代方案)

如果你需要跨进程或者跨机器调用类库的方法,gRPC是.NET Core官方推荐的替代WCF的方案——它是轻量级、高性能的RPC框架,支持跨平台,强类型的调用体验和WCF很像。

步骤:

  1. 给类库和控制台应用都安装NuGet包:Grpc.AspNetCore、Google.Protobuf、Grpc.Tools
  2. 定义.proto文件(用来描述服务和数据结构):
syntax = "proto3";

option csharp_namespace = "MathGrpc";

// 定义服务接口
service CalculatorService {
    rpc Add (AddRequest) returns (AddResponse);
}

// 请求参数
message AddRequest {
    int32 x = 1;
    int32 y = 2;
}

// 响应结果
message AddResponse {
    int32 result = 1;
}
  1. 在控制台应用中实现gRPC服务端,调用类库的Add方法:
using Grpc.Core;
using MathGrpc;
using MathLibrary;

// 实现gRPC服务
public class CalculatorServiceImpl : CalculatorService.CalculatorServiceBase
{
    private readonly Calculator _calculator = new Calculator();

    public override Task<AddResponse> Add(AddRequest request, ServerCallContext context)
    {
        // 调用类库的Add方法
        var result = _calculator.Add(request.X, request.Y);
        return Task.FromResult(new AddResponse { Result = result });
    }
}

// 启动gRPC服务
var server = new Server
{
    Services = { CalculatorService.BindService(new CalculatorServiceImpl()) },
    Ports = { new ServerPort("localhost", 50051, ServerCredentials.Insecure) }
};
server.Start();

Console.WriteLine("gRPC服务已启动,端口:50051");
Console.WriteLine("按任意键停止服务...");
Console.ReadKey();

await server.ShutdownAsync();
  1. 客户端调用(可以是同一个控制台的不同部分,或者另一个进程的应用):
using Grpc.Core;
using MathGrpc;

// 创建gRPC通道
var channel = new Channel("localhost:50051", ChannelCredentials.Insecure);
var client = new CalculatorService.CalculatorServiceClient(channel);

// 调用Add方法
var response = await client.AddAsync(new AddRequest { X = 3, Y = 5 });
Console.WriteLine($"Add结果:{response.Result}");

// 关闭通道
await channel.ShutdownAsync();

3. RESTful Web API(可选,非必须)

如果你的场景需要跨语言调用,或者依赖HTTP生态,那RESTful服务是可行的,但绝对不是必须的。你可以用ASP.NET Core Web API快速实现:

步骤:

  1. 创建一个ASP.NET Core Web API项目,引用你的类库
  2. 编写控制器:
using Microsoft.AspNetCore.Mvc;
using MathLibrary;

[ApiController]
[Route("api/calculator")]
public class CalculatorController : ControllerBase
{
    private readonly Calculator _calculator = new Calculator();

    [HttpGet("add")]
    public IActionResult Add(int x, int y)
    {
        var result = _calculator.Add(x, y);
        return Ok(result);
    }
}
  1. 控制台应用用HttpClient调用:
using System.Net.Http.Json;

var client = new HttpClient();
var result = await client.GetFromJsonAsync<int>("http://localhost:5000/api/calculator/add?x=3&y=5");
Console.WriteLine($"Add结果:{result}");

总结

  • 同一进程内调用:直接引用类库,最省事
  • 跨进程/跨机器调用:优先选gRPC,性能好、强类型,是WCF的完美替代
  • REST只是可选方案,不是.NET Core下暴露方法的必须选择

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:31:54