public static TransferFileJobRequest GetTransferRequest(Stream stream)
        {
            TransferFileJobRequest result = null;
            var lenBytes = new byte[LengthMessageSize];
            int st       = stream.Read(lenBytes, 0, lenBytes.Length);

            if (st < 0)
            {
                throw new InvalidOperationException("Read fail");
            }

            var responseLength = BitConverter.ToInt64(lenBytes, 0);

            var responseBytes = new byte[responseLength];
            int readThisTime  = 0;

            for (var rsf = 0; rsf < responseLength; rsf += readThisTime)
            {
                st = stream.Read(responseBytes, rsf, (int)(responseLength - rsf));
                if (st > 0)
                {
                    readThisTime += st;
                }
            }
            using (var ms = new MemoryStream(responseBytes))
            {
                var responseSerializer = new DataContractJsonSerializer(typeof(TransferFileJobRequest));
                result = responseSerializer.ReadObject(ms) as TransferFileJobRequest;
            }

            return(result);
        }
        public static void SendTransferRequest(Stream stream, TransferFileJobRequest request)
        {
            using (var ms = new MemoryStream())
            {
                var ser = new DataContractJsonSerializer(typeof(TransferFileJobRequest));
                ser.WriteObject(ms, request);
                var msgArray = ms.ToArray();

                var lenBytes = BitConverter.GetBytes((long)msgArray.Length);
                stream.Write(lenBytes, 0, lenBytes.Length);
                stream.Write(msgArray, 0, msgArray.Length);
            }
        }