protected Message SerializeReplyInternal(MessageVersion messageVersion, object[] parameters, object result)
        {
            var retParamInfo = ParameterTypes.FirstOrDefault(x => x.ParamType == ParamType.Return);

            //if (retParamInfo == null)
            //    throw new InvalidOperationException("The return parameter type was not found.");

            var compressionType = DefaultCompressionType;

            Func<string[]> valueGetter = () =>
                {
                    if (retParamInfo == null)
                        return new string[0];

                    var modelProvider = ObjectBuilder.GetModelProvider();

                    var model = modelProvider.CreateModelInfo(retParamInfo.Type, ModeType.Wcf);

                    var serializer = ObjectBuilder.GetSerializer();

                    var data = (serializer.Serialize(result, model.MetaData, ModeType.Wcf) ??
                               new SerializationResult(new byte[0], null)).Data;

                    if (compressionType != CompressionTypeOptions.None)
                    {
                        var compressionProvider = new CompressionProvider();

                        data = compressionProvider.Compress(data, compressionType);
                    }

                    var value = BinaryConverter.ToString(data);

                    return new[] { value };
                };

            var message = Message.CreateMessage(messageVersion, ContractInfo.Action + "Response",
                new ProtoBodyWriter(ContractInfo.OperationContractName, ContractInfo.ServiceNamespace,
                    valueGetter));

            if (compressionType != CompressionTypeOptions.None)
            {
                AddCompressionHeader(message, DefaultCompressionType);
            }

            return message;
        }