public void ReturnTupleTest()
        {
            var callsCount        = 0;
            var serviceInstance   = new TestService(() => callsCount++);
            var serializerFactory = new MessagePackSerializerFactory();
            var serviceDispatcher = new ServiceDispatcher <ITestService>(serializerFactory, new LoggerStub());

            var argumentsData = new byte[2][];

            argumentsData[0] = serializerFactory.CreateSerializer <int>().Serialize(0);
            argumentsData[1] = serializerFactory.CreateSerializer <int>().Serialize(2);

            var result = serviceDispatcher.Dispatch(serviceInstance, new RpcMessage()
            {
                ServiceCode   = typeof(ITestService).FullName.GetHashCode(),
                OperationCode = 3,
                ArgumentsData = argumentsData
            });

            Assert.NotNull(result);
            Assert.True(result.HasReturnValue);
            var resultTuple = serializerFactory.CreateSerializer <(int count, SerializableObject[] objects)>()
                              .Deserialize(result.ReturnValue);

            Assert.Equal(2, resultTuple.count);
            Assert.Equal(SerializableObject.TestInt, resultTuple.objects[0].IntProperty);
            Assert.Equal(SerializableObject.TestString, resultTuple.objects[0].StringProperty);
            Assert.Equal(
                SerializableObject.TestDouble,
                resultTuple.objects[0].NestedObject.DoubleProperty);
        }
示例#2
0
        public async void AsyncClientMethodsTest()
        {
            var serializerFactory    = new MessagePackSerializerFactory();
            var serviceClientFactory = new ServiceClientFactory(new LoggerStub());

            using (var _ = GetTestService(serializerFactory))
            {
                using (var client = serviceClientFactory.CreateServiceClient <ITestService>(
                           "localhost",
                           serializerFactory))
                {
                    var myHashcode = await client.ServiceInstance.GetHashCodeOfMeAsync(SerializableObject.GetTestInstance());

                    Assert.Equal(SerializableObject.TestInt, myHashcode);

                    var constructedObject = await client.ServiceInstance.ConstructObjectAsync(
                        SerializableObject.TestInt,
                        SerializableObject.TestString,
                        SerializableObject.TestDouble);

                    Assert.NotNull(constructedObject);
                    Assert.Equal(SerializableObject.TestInt, constructedObject.IntProperty);
                    Assert.Equal(SerializableObject.TestString, constructedObject.StringProperty);
                    Assert.Equal(SerializableObject.TestDouble, constructedObject.NestedObject.DoubleProperty);

                    var(count, objects) = await client.ServiceInstance.GetObjectsAsync(1, 1);

                    Assert.Equal(2, count);
                    constructedObject = objects.Single();
                    Assert.Equal(SerializableObject.TestInt, constructedObject.IntProperty);
                    Assert.Equal(SerializableObject.TestString, constructedObject.StringProperty);
                    Assert.Equal(SerializableObject.TestDouble, constructedObject.NestedObject.DoubleProperty);
                }
            }
        }
示例#3
0
        static void Main(string[] args)
        {
            var logger = new LoggerStub();

            // using (var logger = new ConsoleLoggerWrapper(new LoggerStub()))
            // {
            Helpers.LogCurrentMemoryUsage(logger);
            // Console.ReadLine();

            var messagePackSerializerFactory = new MessagePackSerializerFactory();

            using (var testServiceClient = ServiceClientFactory.CreateServiceClient <ITestService>(
                       "localhost",
                       logger,
                       messagePackSerializerFactory))
            {
                using (var wcfTestServiceClient = CommonWcfComponents.ServiceClient <ITestService> .Create())
                {
                    Console.WriteLine("Test service client created.");

                    RunTest(wcfTestServiceClient.Service, logger);

                    Helpers.LogCurrentMemoryUsage(logger);

                    Console.WriteLine("All requests send.");
                    Console.ReadLine();
                }
            }
            // }
        }
示例#4
0
        public static void Main(string[] args)
        {
            var logger = new LoggerStub();

            // using (var logger = new ConsoleLoggerWrapper(new LoggerStub()))
            // {
            Helpers.LogCurrentMemoryUsage(logger);
            // Console.ReadLine();

            var messagePackSerializerFactory = new MessagePackSerializerFactory();
            var rpcTcpServicePublisher       = new RpcTcpServicePublisher(messagePackSerializerFactory, logger);
            var defaultServiceTimeout        = TimeSpan.FromMinutes(1);
            var testService = new TestService(logger);

            using (new DisposableCollectionHolder(
                       rpcTcpServicePublisher.PublishUnsecured <ITestService>(
                           testService,
                           defaultServiceTimeout)))
            {
                using (ServiceHostContainerFactory.Create <TestService, ITestService>())
                {
                    Console.WriteLine("Services started. Press Enter to stop.");
                    Console.ReadLine();

                    Helpers.LogCurrentMemoryUsage(logger);
                }
            }
            // }

            Console.WriteLine("Services stopped.");
        }
        public void ServiceTest()
        {
            var callsCount        = 0;
            var serviceInstance   = new TestService(() => callsCount++);
            var serializerFactory = new MessagePackSerializerFactory();
            var testObject        = SerializableObject.GetTestInstance();
            var argumentsData     = new byte[1][];

            argumentsData[0] = serializerFactory.CreateSerializer <SerializableObject>().Serialize(testObject);

            var serviceDispatcher = new ServiceDispatcher <ITestService>(serializerFactory, new LoggerStub());

            Assert.Equal(serviceDispatcher.ServicePort, TestService.ServicePort);
            var result = serviceDispatcher.Dispatch(serviceInstance, new RpcMessage
            {
                ServiceCode   = typeof(ITestService).FullName.GetHashCode(),
                OperationCode = 0,
                ArgumentsData = argumentsData
            });

            Assert.NotNull(result);
            Assert.True(result.HasReturnValue);
            Assert.Equal(
                testObject.IntProperty,
                serializerFactory.CreateSerializer <int>().Deserialize(result.ReturnValue));

            argumentsData    = new byte[3][];
            argumentsData[0] = serializerFactory.CreateSerializer <int>()
                               .Serialize(SerializableObject.TestInt);
            argumentsData[1] = serializerFactory.CreateSerializer <string>()
                               .Serialize(SerializableObject.TestString);
            argumentsData[2] = serializerFactory.CreateSerializer <double>()
                               .Serialize(SerializableObject.TestDouble);

            result = serviceDispatcher.Dispatch(serviceInstance, new RpcMessage
            {
                ServiceCode   = typeof(ITestService).FullName.GetHashCode(),
                OperationCode = 1,
                ArgumentsData = argumentsData
            });

            Assert.NotNull(result);
            Assert.True(result.HasReturnValue);
            var resultObject = serializerFactory.CreateSerializer <SerializableObject>()
                               .Deserialize(result.ReturnValue);

            Assert.NotNull(resultObject);
            Assert.Equal(testObject.IntProperty, resultObject.IntProperty);
            Assert.Equal(testObject.StringProperty, resultObject.StringProperty);
            Assert.Equal(
                testObject.NestedObject.DoubleProperty,
                resultObject.NestedObject.DoubleProperty);

            argumentsData    = new byte[1][];
            argumentsData[0] = serializerFactory.CreateSerializer <string>()
                               .Serialize(SerializableObject.TestString);

            result = serviceDispatcher.Dispatch(serviceInstance, new RpcMessage
            {
                ServiceCode   = typeof(ITestService).FullName.GetHashCode(),
                OperationCode = 2,
                ArgumentsData = argumentsData
            });

            Assert.NotNull(result);
            Assert.False(result.HasReturnValue);
            Assert.Equal(1, callsCount);
        }
示例#6
0
        public void ServerTest()
        {
            var callsCount        = 0;
            var serviceInstance   = new TestService(() => callsCount++);
            var serializerFactory = new MessagePackSerializerFactory();
            var servicePublisher  = new RpcTcpServicePublisher(serializerFactory, new LoggerStub());

            using (servicePublisher.PublishUnsecured <ITestService>(serviceInstance, TimeSpan.FromMinutes(1)))
            {
                PerformTestWithConnectedNetworkStream(networkStream =>
                {
                    var argumentsData = new byte[1][];
                    argumentsData[0]  = serializerFactory
                                        .CreateSerializer <SerializableObject>()
                                        .Serialize(SerializableObject.GetTestInstance());
                    var rpcMessage = serializerFactory.CreateSerializer <RpcMessage>().Serialize(new RpcMessage()
                    {
                        ServiceCode   = typeof(ITestService).FullName.GetHashCode(),
                        OperationCode = 0,
                        ArgumentsData = argumentsData
                    });

                    networkStream.Write(rpcMessage, 0, rpcMessage.Length);
                    networkStream.WriteEndOfSessionMessage();

                    var data      = new List <byte>();
                    var dataChunk = new byte[128];
                    do
                    {
                        var bytesRead = networkStream.Read(dataChunk, 0, dataChunk.Length);
                        data.AddRange(dataChunk.Take(bytesRead).ToArray());
                    } while (networkStream.DataAvailable);

                    var serviceCallResult = serializerFactory.CreateSerializer <ServiceCallResult>().Deserialize(data.ToArray());
                    var result            = serializerFactory.CreateSerializer <int>().Deserialize(serviceCallResult.ReturnValue);

                    Assert.Equal(SerializableObject.TestInt, result);
                });

                PerformTestWithConnectedNetworkStream(networkStream =>
                {
                    var argumentsData = new byte[2][];
                    argumentsData[0]  = serializerFactory.CreateSerializer <int>().Serialize(0);
                    argumentsData[1]  = serializerFactory.CreateSerializer <int>().Serialize(2);

                    var rpcMessage = serializerFactory.CreateSerializer <RpcMessage>().Serialize(new RpcMessage()
                    {
                        ServiceCode   = typeof(ITestService).FullName.GetHashCode(),
                        OperationCode = 3,
                        ArgumentsData = argumentsData
                    });

                    networkStream.Write(rpcMessage, 0, rpcMessage.Length);
                    networkStream.WriteEndOfSessionMessage();

                    var data      = new List <byte>();
                    var dataChunk = new byte[128];
                    do
                    {
                        var bytesRead = networkStream.Read(dataChunk, 0, dataChunk.Length);
                        data.AddRange(dataChunk.Take(bytesRead).ToArray());
                    } while (networkStream.DataAvailable);

                    var serviceCallResult = serializerFactory.CreateSerializer <ServiceCallResult>().Deserialize(data.ToArray());
                    var resultTuple       = serializerFactory.CreateSerializer <(int count, SerializableObject[] objects)>()
                                            .Deserialize(serviceCallResult.ReturnValue);

                    Assert.Equal(2, resultTuple.count);
                    Assert.Equal(SerializableObject.TestInt, resultTuple.objects[0].IntProperty);
                    Assert.Equal(SerializableObject.TestString, resultTuple.objects[0].StringProperty);
                    Assert.Equal(SerializableObject.TestDouble, resultTuple.objects[0].NestedObject.DoubleProperty);
                });
            }
        }