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); }
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); }
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(); }