Exemple #1
0
            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));
            }
Exemple #2
0
            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);
                }
            }