在.Net 4.6.1中使用MagicOnion做gRPC
一、新建项目MeetingInterface(window类库)
1、在nuget中引用0.5.3(其他版本都需要.net core)
2、创建接口IHello
using MagicOnion; namespace MeetingInterface { public interface IHello : IService<IHello> { UnaryResult<string> Hello(string name); } }
二、创建项目Host(window控制台)
1、在nuget中引用0.5.3(其他版本都需要.net core)
2、创建IHello 的实现HelloServices
using MagicOnion; using MagicOnion.Server; using MeetingInterface; namespace Host.Services { public class HelloServices : ServiceBase<IHello>, IHello { public UnaryResult<string> Hello(string name) { return new UnaryResult<string>($"hello {name}"); } } }
3、创建并启用服务
using System; using Grpc.Core; using MagicOnion.Server; namespace Host { class Program { static void Main(string[] args) { GrpcEnvironment.SetLogger(new Grpc.Core.Logging.ConsoleLogger()); // setup MagicOnion and option. var service = MagicOnionEngine.BuildServerServiceDefinition(isReturnExceptionStackTraceInErrorDetail: true); var server = new global::Grpc.Core.Server { Services = { service }, Ports = { new ServerPort("localhost", 12345, ServerCredentials.Insecure) } }; // launch gRPC Server. server.Start(); // and wait. Console.ReadLine(); } } }
三、创建Winform客户端
using System; using System.Windows.Forms; using Grpc.Core; using MagicOnion.Client; using MeetingInterface; namespace Client { public partial class Form1 : Form { private readonly IHello _client; public Form1() { InitializeComponent(); // standard gRPC channel var channel = new Channel("localhost", 12345, ChannelCredentials.Insecure); // get MagicOnion dynamic client proxy _client = MagicOnionClient.Create<IHello>(channel); label1.Text = ""; } private void button1_Click(object sender, EventArgs e) { // call method. var result = _client.Hello("Tom"); label1.Text = $"Client Received:{result.ResponseAsync.Result}"; } private void button2_Click(object sender, EventArgs e) { label1.Text = ""; } } }
浙公网安备 33010602011771号