protected object DeserializeReplyInternal(Message message, object[] parameters) { var retParamInfo = ParameterTypes.FirstOrDefault(x => x.ParamType == ParamType.Return); if (retParamInfo == null) { return(null); } var store = ObjectBuilder.GetModelStore(); var serializer = ObjectBuilder.GetSerializer(); var reader = message.GetReaderAtBodyContents(); reader.Read(); var model = store.GetModel(retParamInfo.Type, ModeType.Wcf); if (model == null) { throw new InvalidOperationException("The model cannot be null, meta data fetch failed. Type: " + retParamInfo.Type.FullName); } reader.Read(); var val = reader.Value; var data = BinaryConverter.FromString(val); var compressionType = GetMessageCompressionTypeOptions(message); if (compressionType != CompressionTypeOptions.None) { var compressionProvider = new CompressionProvider(); data = compressionProvider.DeCompress(data, compressionType); } object retVal; try { retVal = serializer.Deserialize(data, model.MetaData, retParamInfo.Type, ModeType.Wcf); } catch (SerializationException) { store.RemoveModel(retParamInfo.Type, ModeType.Wcf); throw; } return(retVal); }
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); }