public void SendOneWay(ArraySegment <byte> messageHeaders, IEnumerable <ArraySegment <byte> > requestBody) { var headerSerializer = this.serializersManager.GetHeaderSerializer(); var deserializerHeaders = headerSerializer.DeserializeRequestHeaders(new IncomingMessageHeader(new SegmentedReadMemoryStream(messageHeaders))); var msgBodySerializer = this.serializersManager.GetRequestBodySerializer(deserializerHeaders.InterfaceId); var deserializedMsgBody = msgBodySerializer.Deserialize(new IncomingMessageBody(new SegmentedReadMemoryStream(requestBody))); var msg = new ServiceRemotingRequestMessage(deserializerHeaders, deserializedMsgBody); Task.Run(() => this.callbackHandler.HandleOneWayMessage(msg)); }
public async Task <ResponseMessage> RequestResponseAsync(ArraySegment <byte> messageHeaders, IEnumerable <ArraySegment <byte> > requestBody) { IMessageBody outgoingMessageBody = null; IMessageHeader outgoingMessageHeader = null; try { var headerSerializer = this.serializersManager.GetHeaderSerializer(); var deSerializedHeader = headerSerializer.DeserializeRequestHeaders( new IncomingMessageHeader(new SegmentedReadMemoryStream(messageHeaders))); var msgBodySerializer = this.serializersManager.GetRequestBodySerializer(deSerializedHeader.InterfaceId); var deserializedMsg = msgBodySerializer.Deserialize( new IncomingMessageBody(new SegmentedReadMemoryStream(requestBody))); var msg = new ServiceRemotingRequestMessage(deSerializedHeader, deserializedMsg); var retval = await this.messageHandler.HandleRequestResponseAsync( this.requestContext, msg); if (retval == null) { return(new ResponseMessage()); } outgoingMessageHeader = headerSerializer.SerializeResponseHeader(retval.GetHeader()); var responseSerializer = this.serializersManager.GetResponseBodySerializer(deSerializedHeader.InterfaceId); outgoingMessageBody = responseSerializer.Serialize(retval.GetBody()); var responseMessage = new ResponseMessage(); responseMessage.ResponseBody = outgoingMessageBody != null ? outgoingMessageBody.GetSendBuffers() : new List <ArraySegment <byte> >(); responseMessage.MessageHeaders = outgoingMessageHeader != null ? outgoingMessageHeader.GetSendBuffer() : new ArraySegment <byte>(); return(responseMessage); } catch (Exception e) { ServiceTrace.Source.WriteInfo("WcfRemotingService", "Remote Exception occured {0}", e); throw new FaultException <RemoteException>(RemoteException.FromException(e), e.Message); } }