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

本文介绍了一种将流数据转换为字符串及从字符串转换回流的方法。这些方法使用UTF-8编码,并通过内存流实现数据读取与写入。此外,还提供了异常处理逻辑来确保数据转换过程的稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        [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;
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值