Wcf Rest Service模板--方法输入输出流数据

        [WebInvoke(UriTemplate = "Qry?msg={xml}", Method = "POST")]
        public Stream SearchQry(string xml, Stream request)
        {
            WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
           
            //将流转换为字符串
            string requestData = new ParseUtil().StreamToString(request);               

            //将字符串转换为流
            return new ParseUtil().StringToStream(responseData);
        }
        
        
         /// <summary>
        /// 将流数据转换成字符串
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        public string StreamToString(Stream stream)
        {
            string strData = string.Empty;

            try
            {
                byte[] bytes = streamToByteArray(stream);
                strData = Encoding.UTF8.GetString(bytes);               //以字符串表示的流数据
            }
            catch (Exception ex)
            {
                System.Diagnostics.StackFrame stackFrame = new System.Diagnostics.StackFrame();
                System.Reflection.MethodBase methodBase = stackFrame.GetMethod();
                LogUtil.LogException("方法:" + methodBase.ToString() + "\t异常信息:" + ex.Message + "\t【将流数据转换成字符串】方法发生错误");
            }
            return strData;
        }
        
        /// <summary>
        /// 将流数据转换成字节数组
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        private byte[] streamToByteArray(Stream stream)
        {
            byte[] buffer = new byte[32768];

            byte[] bytesReturn = null;
            using (MemoryStream ms = new MemoryStream())
            {
                while (true)
                {
                    int read = stream.Read(buffer, 0, buffer.Length);
                    if (read <= 0) //无数据时跳出循环
                    {
                        break;
                    }
                    ms.Write(buffer, 0, read);
                }

                bytesReturn = ms.ToArray();
            }
            stream.Close();

            return bytesReturn;
        }
        
        
         /// <summary>
        /// 将字符串转换成流
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        public Stream StringToStream(string xml)
        {
            try
            { 
                xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" + xml.Replace("\r\n", "").Replace(" ", "");
                byte[] buffer = System.Text.Encoding.UTF8.GetBytes(xml);
                Stream st = new MemoryStream(buffer);
                st.Flush();
                st.Position = 0;

                return st;
            }
            catch (Exception ex)
            {
                System.Diagnostics.StackFrame stackFrame = new System.Diagnostics.StackFrame();
                System.Reflection.MethodBase methodBase = stackFrame.GetMethod();
                LogUtil.LogException("方法:" + methodBase.ToString() + "\t异常信息:" + ex.Message + "\t【将字符串转换成流】方法发生错误");
                return null;
            }
        }
posted @ 2012-04-23 15:46    阅读(956)  评论(0编辑  收藏  举报