Beispiel #1
0
        public byte[] CallService(byte[] serviceName, byte[] functionName, byte[] header, byte[] inputParameters)
        {
            string hostName;
            int    port;

            try {
                string[] addressStrings = ServerAddress.Split(':');
                hostName = addressStrings[0];
                port     = Convert.ToInt32(addressStrings[1]);
            } catch (Exception err) {
                throw new Exception("地址格式错误", err).AddExceptionData("地址", ServerAddress);
            }

            var tcpClient = new TcpClient();

            tcpClient.Connect(hostName, port);
            EventPublic.Information("[{0}]连接[{1}]成功"
                                    , tcpClient.Client.LocalEndPoint
                                    , tcpClient.Client.RemoteEndPoint);

            var clientStream = tcpClient.GetStream();
            var reader       = new BinaryReader(clientStream);
            var writer       = new BinaryWriter(clientStream);

            writer.NetWriteBinary(serviceName);

            writer.NetWriteBinary(functionName);

            writer.NetWriteBinary(header);

            writer.NetWriteBinary(inputParameters);

            // 获取返回参数
            string resultType = reader.NetReadObject <string>();

            byte[] result = null;
            if (resultType == RemotePublic.SuccessString)
            {
                result = reader.NetReadBinary();
            }
            else
            {
                var message         = reader.NetReadObject <string>();
                var exceptionString = reader.NetReadObject <string>();

                var remoteException = new Exception(message);
                var fullServiceName = String.Format("{0}.{1}"
                                                    , RemotePublic.Deserialize <string>(serviceName)
                                                    , RemotePublic.Deserialize <string>(functionName));
                throw new Exception("远程调用服务异常", remoteException)
                      .AddExceptionData("服务地址", ServerAddress)
                      .AddExceptionData("服务", fullServiceName)
                      .AddExceptionData("远程异常信息", exceptionString);
            }

            tcpClient.Close();
            clientStream.Close();
            return(result);
        }
Beispiel #2
0
        public byte[] CallService(byte[] serviceName, byte[] functionName, byte[] header, byte[] inputParameters)
        {
            var result = RemotePublic.CallService(ServiceList
                                                  , RemotePublic.Deserialize <string>(serviceName)
                                                  , RemotePublic.Deserialize <string>(functionName)
                                                  , RemotePublic.Deserialize <Header>(header)
                                                  , RemotePublic.Deserialize <object[]>(inputParameters));

            return(result);
        }
Beispiel #3
0
        private void AcceptSocket(TcpListener listener)
        {
            var tcpClient = listener.AcceptTcpClient();

            EventPublic.Information("[{0}]收到[{1}]的请求"
                                    , tcpClient.Client.LocalEndPoint
                                    , tcpClient.Client.RemoteEndPoint);

            // 接收到连接后完成通讯
            var clientStream = tcpClient.GetStream();
            var reader       = new BinaryReader(clientStream);
            var writer       = new BinaryWriter(clientStream);

            // 读取服务名称
            var serviceName = reader.NetReadBinary();
            // 方法名称
            var functionName = reader.NetReadBinary();
            // 读取协议头
            var header = reader.NetReadBinary();
            // 输入参数
            var inputParameters = reader.NetReadBinary();

            var serviceNameString  = RemotePublic.Deserialize <string>(serviceName);
            var functionNameString = RemotePublic.Deserialize <string>(functionName);

            // 调用服务
            EventPublic.Information("开始调用服务:{0}.{1}"
                                    , serviceNameString
                                    , functionNameString);
            try {
                var result = RemotePublic.CallService(ServiceList
                                                      , serviceNameString
                                                      , functionNameString
                                                      , RemotePublic.Deserialize <Header>(header)
                                                      , RemotePublic.Deserialize <object[]>(inputParameters));
                writer.NetWriteObject(RemotePublic.SuccessString);
                writer.NetWriteBinary(result);
            } catch (Exception err) {
                // 发出异常
                writer.NetWriteObject(RemotePublic.FailedString);
                writer.NetWriteObject(err.Message);
                writer.NetWriteObject(err.FormatException());
            }


            tcpClient.Close();
            clientStream.Close();
        }