예제 #1
0
        public async Task HostAndChannelFactory()
        {
            var host = new ProtocolHost();

            host.LoadFromReference <ProtocolHostTests>();
            host.Resolver.Register(new CalculatorParameter()
            {
                First = 10
            });

            var cts        = new CancellationTokenSource();
            var serverTask = host.StartServerAsync("127.0.0.1", 91, cts.Token);

            var channelProvider = new ChannelProvider("127.0.0.1", 91);

            channelProvider.LoadFromReference <ProtocolHostTests>();
            var calculator = await channelProvider.GetChannelAsync <ICalculator>();

            var result = await calculator.AddAsync("9");

            Assert.AreEqual(19, result.Result);

            cts.Cancel();
            try
            {
                await serverTask;
            }
            catch { };

            host = new ProtocolHost();
            host.LoadFromReference <ProtocolHostTests>();
            host.Resolver.Register(new CalculatorParameter()
            {
                First = 10
            });

            serverTask = host.StartServerAsync("127.0.0.1", 91, CancellationToken.None);

            var channelProviderCollection = new ChannelProviderCollection(channelProvider);

            calculator = await channelProviderCollection.GetChannelAsync <ICalculator>();

            result = await calculator.AddAsync("9");

            Assert.AreEqual(19, result.Result);
        }