webservic接收byte[]请求
今天做小程序时,发现httphelper有提交byte[]的功能,但webservice端接收时一直没有成功,找了很多方法,最终解决,记录下。
private void button2_Click(object sender, EventArgs e) { Stopwatch st = new Stopwatch(); st.Start(); //生成dateset string toDataTableSql = "select id, djbh ,dj_sn ,xgdjbh ,pihao ,pici ,spid from T_ywmxk where zhuangtai='" + ZhuangTai.待上传 + "'"; DataSet ds = SqlHelper.ExecuteDataSet(CommandType.Text, toDataTableSql); byte[] Zipbuffer = DataFormatter.GetBinaryFormatData(ds); HttpHelper http = new HttpHelper(); HttpItem item = new HttpItem() { URL = @"http://localhost:61839/SaveData.asmx/Adddataset", // URL = url,//URL这里都是测试URl 必需项 Encoding = null,//编码格式(utf-8,gb2312,gbk) Method = "post", ContentType = "application/x-www-form-urlencoded",//返回类型 可选项有默认值, PostDataType = PostDataType.Byte, PostdataByte = Zipbuffer // Postdata ="data="+ HttpHelper.ByteToString(Zipbuffer) }; //得到新的HTML代码 HttpResult result = http.GetHtml(item); st.Stop(); string str = st.ElapsedMilliseconds.ToString(); }
webservice端接收:
[ValidateInput(false)] [WebMethod] public void Adddataset() { Stream s = System.Web.HttpContext.Current.Request.InputStream; byte[] b = new byte[s.Length]; s.Read(b, 0, (int)s.Length); DataSet dsData = DataFormatter.RetrieveDataSet(b); DataTable dt = dsData.Tables[0]; StringBuilder str = new StringBuilder(); int counts = 0; for (int d = 0; d < dt.Rows.Count; d++) { T_ywmxk t = new T_ywmxk(); _db.T_ywmxk.Add(t); t.CreateTime = DateTime.Now; t.djbh = dt.Rows[d]["djbh"].ToString(); t.dj_sn = (int)dt.Rows[d]["dj_sn"]; t.xgdjbh = dt.Rows[d]["xgdjbh"].ToString(); t.pihao = dt.Rows[d]["pihao"].ToString(); t.pici = dt.Rows[d]["pici"].ToString(); t.spid = dt.Rows[d]["spid"].ToString(); counts++; } _db.SaveChanges(); str.Append("总计:" + dt.Rows.Count); Context.Response.Write(str.ToString()); }
实现DataSet与byte[]的互转:
using System.Data; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; namespace JiaRuiDataPost.MyClass { public class DataFormatter { private DataFormatter() { } /// <summary> /// Serialize the Data of dataSet to binary format /// </summary> /// <param name="dsOriginal"></param> /// <returns></returns> static public byte[] GetBinaryFormatData(DataSet dsOriginal) { byte[] binaryDataResult = null; MemoryStream memStream = new MemoryStream(); IFormatter brFormatter = new BinaryFormatter(); dsOriginal.RemotingFormat = SerializationFormat.Binary; brFormatter.Serialize(memStream, dsOriginal); binaryDataResult = memStream.ToArray(); memStream.Close(); memStream.Dispose(); return binaryDataResult; } /// <summary> /// Retrieve dataSet from data of binary format /// </summary> /// <param name="binaryData"></param> /// <returns></returns> static public DataSet RetrieveDataSet(byte[] binaryData) { DataSet dataSetResult = null; MemoryStream memStream = new MemoryStream(binaryData); IFormatter brFormatter = new BinaryFormatter(); object obj = brFormatter.Deserialize(memStream); dataSetResult = (DataSet)obj; return dataSetResult; } } }

浙公网安备 33010602011771号