public RpcTransportErrorResponse( string correlationMessageId, IRpcMessageSenderContext senderContext, Exception errorInfo) { this.CorrelationMessageId = correlationMessageId; this.SenderContext = senderContext; this.ErrorInfo = errorInfo; }
private bool dispatchCommand( ServiceUniqueNameInfo commandUniqueName, IRpcMessageSenderContext context, string requestMessageContent, out RemoteServiceBusResponseContext responseContext, out string responseMessageContent, out WindServiceBusRpcException rpcException) { // 创建响应上下文 responseMessageContent = null; rpcException = null; responseContext = new RemoteServiceBusResponseContext(); context.FillRemoteContext(responseContext); // 通过RPC框架执行远程调用 try { RpcTransportMessageRequest requestMessage = new RpcTransportMessageRequest(MessageIdGenerator.CreateMessageId()) { ServiceUniqueName = commandUniqueName, MessageHeader = new RpcTransportMessageHeader { //TODO: 其他消息头 }, MessageContent = requestMessageContent, }; RpcTransportMessageResponse responseMessage = this.rpcServerManager.SendMessage(requestMessage, context); //响应上下文 if (responseMessage != null) { responseContext.FillRemoteContext(responseMessage.MessageHeader); //服务响应信息填入RemoteContext } //响应消息验证 if (responseMessage == null || responseMessage.CorrelationMessageId == null || responseMessage.CorrelationMessageId != requestMessage.MessageId || responseMessage.MessageContent == null) { throw new WindServiceBusException(string.Format("request [{0}] get error response !", requestMessage.MessageId)); } if (responseMessage.ResponseCode != RpcTransportResponseCode.Success) { throw new WindServiceBusException(string.Format("request [{0}] get error response: {1}", requestMessage.MessageId, responseMessage.ErrorInfo)); } responseMessageContent = responseMessage.MessageContent; return(true); //请求成功 } catch (Exception serviceBusException) { this._logger.Error("WindServiceBusException: " + commandUniqueName, serviceBusException); rpcException = new WindServiceBusRpcException(responseContext, serviceBusException); return(false); //请求失败 } }
private ExpoMessageSenderContext validateExpoSenderContext(IRpcMessageSenderContext requestContext) { //获取请求目标上下文 var context = requestContext as ExpoMessageSenderContext; if (context == null) { throw new WindServiceBusException("request context type error!"); } if (context.TargetAppClassId <= 0) { throw new WindServiceBusException("target expo AppClassId shouled not be empty!"); } if (context.TargetCommandId <= 0) { throw new WindServiceBusException("target expo CommandId shouled not be empty!"); } return(context); }
public RpcTransportMessageResponse SendMessage(RpcTransportMessageRequest request, IRpcMessageSenderContext requestContext) { this.validateMessage(request); var context = this.validateExpoSenderContext(requestContext); return(this.sendMessageCore(request, context)); }
/// <summary> /// 发送RPC请求并获取响应 /// </summary> public RpcTransportMessageResponse SendMessage(RpcTransportMessageRequest request, IRpcMessageSenderContext requestContext) { return(this.MessageSender.SendMessage(request, requestContext)); }
/// <summary> /// 发送RPC消息 /// </summary> /// <param name="serviceName">服务名称</param> /// <param name="request">请求消息</param> /// <returns>响应消息</returns> public RpcTransportMessageResponse SendMessage(RpcTransportMessageRequest request, IRpcMessageSenderContext rpcContext) { IRpcServer rpcServer = rpcServers.FirstOrDefault(server => server.RpcType == rpcContext.RpcType); return(rpcServer.SendMessage(request, rpcContext)); }