关于新建webservice的例子,这里不赘述,重点是调用过程中,一些注意事项
.net记得添加服务引用,
.net记得添加服务引用,
.net记得添加服务引用,
新建服务,很大程度上是要跨平台使用,因此并不能直接返回诸如,datarow,datatable之类的数据集合,
跨平台序列化
跨平台序列化
跨平台序列化
解决方法是,序列化,某位大神说过,跨平台,不序列化,需要面壁思过,
这里实现的方式,转为bytes[],同时需要注意,进行解压步骤,数据量大,节省宽带,
服务端,和客户端 解压缩,要一致
服务端,和客户端 解压缩,要一致
服务端,和客户端 解压缩,要一致
相关方法和代码
protected DBSERVICE.connDBSoapClient conn = new DBSERVICE.connDBSoapClient();
//.net 记得添加服务引用,才能调用
//.net 记得添加服务引用,才能调用
//.net 记得添加服务引用,才能调用
/// <summary>
/// 序列化
/// </summary>
/// <param name="data">要序列化的对象</param>
/// <returns>返回存放序列化后的数据缓冲区</returns>
public byte[] Serialize(object data)
{
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream rems = new MemoryStream();
formatter.Serialize(rems, data);
return rems.GetBuffer();
}
/// <summary>
/// 反序列化
/// </summary>
/// <param name="data">数据缓冲区</param>
/// <returns>对象</returns>
public object Deserialize( byte[] data)
{
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream rems = new MemoryStream(data);
data = null;
return formatter.Deserialize(rems);
}
//需要自己写相关的压缩,解压方法,这里采用的公司封装的zip压缩方式
//需要自己写相关的压缩,解压方法,这里采用的公司封装的zip压缩方式
//需要自己写相关的压缩,解压方法,这里采用的公司封装的zip压缩方式
public byte[] getbyte(DataSet dataSet)
{
DataSetSurrogate dss = new DataSetSurrogate(dataSet);
BinaryFormatter ser = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
ser.Serialize(ms, dss);
byte[] buffer = ms.ToArray();
byte[] zipBuffer = new CompressionHelper(CompressionLevel.BestSpeed).CompressToBytes(buffer);
return zipBuffer;
}
public DataSet getdateset(byte[] zipBuffer)
{
byte[] buffer = new CompressionHelper(CompressionLevel.BestSpeed).DecompressToBytes(zipBuffer);
MemoryStream br = new MemoryStream(buffer);
BinaryFormatter bf = new BinaryFormatter();
object o = bf.Deserialize(br);
DataSetSurrogate sds = (DataSetSurrogate)o;
DataSet ds = sds.ConvertToDataSet();
br.Close();
return ds;
}
//调用相关
conn.Insert(Serialize(ht), "DW_PHONE");
//select * from DW_PHONE
byte[] bys = conn.GetDataTable(@"select b.RealName 沟通人员,case when [Type]='2' then '呼出' else '来电' end 类型,
case when a.state=1 then '已接' else '未接' end 状态,
cast(Times/60 as varchar(8))+'分'+cast(Times%60 as varchar(8))+'秒' 沟通时长,FollowAbstract 产品摘要,AbstractContent 内容摘要 from DW_PHONE a
left join Tb_Common_User b on a.WorkNo=b.WorkNO");
DataTable dt = getdateset(bys).Tables[0];