public Message SerializeReply(MessageVersion messageVersion, object[] parameters, object result)
        {
            Message request = OperationContext.Current.RequestContext.RequestMessage;
            object  propObj;

            if (result is Stream)
            {
                byte[] data;
                if (result is MemoryStream)
                {
                    data = ((MemoryStream)result).ToArray();
                }
                else
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        ((Stream)result).CopyTo(ms);
                        data = ms.ToArray();
                    }
                }
                System.ServiceModel.Channels.Message replyMessage = System.ServiceModel.Channels.Message.CreateMessage(messageVersion, operation.Messages[1].Action, new RawBodyWriter(data));
                replyMessage.Properties.Add(WebBodyFormatMessageProperty.Name, new WebBodyFormatMessageProperty(WebContentFormat.Raw));
                return(replyMessage);
            }
            if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out propObj))
            {
                var prop   = (HttpRequestMessageProperty)propObj;
                var accept = prop.Headers[HttpRequestHeader.Accept];
                if (accept != null)
                {
                    if (jsonContentTypes.IsMatch(accept))
                    {
                        JsonSerializer j = new JsonSerializer();
                        return(j.Serialize(operation, messageVersion, parameters, result));
                    }
                    if (protoContentTypes.IsMatch(accept))
                    {
                        ProtobufSerializer j = new ProtobufSerializer();
                        return(j.Serialize(operation, messageVersion, parameters, result));
                    }
                }
            }
            XmlSerializer x = new XmlSerializer();

            return(x.Serialize(operation, messageVersion, parameters, result));
        }
 public Message SerializeReply(MessageVersion messageVersion, object[] parameters, object result)
 {
     Message request = OperationContext.Current.RequestContext.RequestMessage;
     object propObj;
     if (result is Stream)
     {
         byte[] data;
         if (result is MemoryStream)
         {
             data = ((MemoryStream) result).ToArray();
         }
         else
         {
             using (MemoryStream ms = new MemoryStream())
             {
                 ((Stream)result).CopyTo(ms);
                 data=ms.ToArray();
             }
         }
         System.ServiceModel.Channels.Message replyMessage = System.ServiceModel.Channels.Message.CreateMessage(messageVersion, operation.Messages[1].Action, new RawBodyWriter(data));
         replyMessage.Properties.Add(WebBodyFormatMessageProperty.Name, new WebBodyFormatMessageProperty(WebContentFormat.Raw));
         return replyMessage;
     }
     if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out propObj))
     {
         var prop = (HttpRequestMessageProperty) propObj;
         var accept = prop.Headers[HttpRequestHeader.Accept];
         if (accept != null)
         {
             if (jsonContentTypes.IsMatch(accept))
             {
                 JsonSerializer j = new JsonSerializer();
                 return j.Serialize(operation, messageVersion, parameters, result);
             }
             if (protoContentTypes.IsMatch(accept))
             {
                 ProtobufSerializer j=new ProtobufSerializer();
                 return j.Serialize(operation, messageVersion, parameters, result);
             }
         }
     }
     XmlSerializer x=new XmlSerializer();
     return x.Serialize(operation, messageVersion, parameters, result);
 }