zoukankan      html  css  js  c++  java
  • MagicOnion Grpc ContractlessStandard

    前言: MessagePack 序列化默认是标准的 StandardResolver ,如果希望DTO模型不再添加 [MessagePackObject(true)] 这样的注解(这样更普遍一些),那么需要在 Server端和 Client 端都要设置一下序列化的 Resolver,把默认的标准Resolver给替换掉。

    以下给个例子:

    1、DTO模型定义

        public class SumRequest
        {
            public double Parm1 { get; set; }
            public double Parm2 { get; set; }
    
        }
    
        public class SumReply
        {
            public long Id { get; set; }
            public string Code { get; set; }
            public int Age { get; set; }
            public DateTime CreTime { get; set; }
            public double Amount { get; set; }// sum 
            public decimal Price { get; set; }
    
        }

    2、协议定义

        public interface ISumTest: MagicOnion.IService<ISumTest>
        {
            MagicOnion.UnaryResult<SumReply> Sum(SumRequest req);
        }

    3、Server 端协议的实现

        public class SumTest : MagicOnion.Server.ServiceBase<ISumTest>, ISumTest
        {
            public MagicOnion.UnaryResult<SumReply> Sum(SumRequest req)
            {
                Console.WriteLine("hi, request coming");
                return new MagicOnion.UnaryResult<SumReply>(new SumReply()
                {
                    Age = 20,
                    Amount = req.Parm1 + req.Parm2,
                    CreTime = DateTime.Now.Local(),
                    Id = 8888,
                    Code = "中国人",
                    Price = 99.8m
                });
            }
        }

    4、Server 服务开启

        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    var service = MagicOnionEngine.BuildServerServiceDefinition(
                        new Assembly[] { typeof(Program).Assembly },
                        new MagicOnionOptions(false)
                        {
                            MagicOnionLogger = new MagicOnionLogToGrpcLogger(),
                            SerializerOptions = MessagePackSerializerOptions.Standard.WithResolver(
                                MessagePack.Resolvers.ContractlessStandardResolverAllowPrivate.Instance)
                        });
    
                    Server server = new Server
                    {
                        Services = { service },
                        Ports = { new ServerPort("localhost", 5555, ServerCredentials.Insecure) }
                    };
                    server.Start();
    
                    Console.WriteLine("localhost:5555 已开启");
                }
                catch (Exception err)
                {
                    Console.WriteLine(err.Message + Environment.NewLine + err.StackTrace);
                }
                Console.ReadLine();
    
            }
        }

    5、Client 调用

        class Program
        {
            static void Main(string[] args)
            {
                var channel = new Channel("localhost", 5555, ChannelCredentials.Insecure);
    
                var client = MagicOnionClient.Create<ISumTest>(channel
                , MessagePack.MessagePackSerializerOptions.Standard.WithResolver(
                    MessagePack.Resolvers.ContractlessStandardResolverAllowPrivate.Instance));
    
                var rep = new SumRequest() { Parm1 = 123.456d, Parm2 = 456.789d };
    
                var sum = client.Sum(rep).ResponseAsync.Result;
                
    
            }
        }

    6、结果截图

  • 相关阅读:
    现代软件工程 第一章 概论 第4题——邓琨
    现代软件工程 第一章 概论 第9题——邓琨
    现代软件工程 第一章 概论 第7题——张星星
    现代软件工程 第一章 概论 第5题——韩婧
    hdu 5821 Ball 贪心(多校)
    hdu 1074 Doing Homework 状压dp
    hdu 1074 Doing Homework 状压dp
    hdu 1069 Monkey and Banana LIS变形
    最长上升子序列的初步学习
    hdu 1024 Max Sum Plus Plus(m段最大子列和)
  • 原文地址:https://www.cnblogs.com/jonney-wang/p/13660004.html
Copyright © 2011-2022 走看看