新文章 网摘 文章 随笔 日记

在.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 = "";
        }
    }
}

 

posted @ 2020-02-10 13:30  岭南春  阅读(250)  评论(0)    收藏  举报