Webservice 序列化的问题 Dataset压缩传输

ASSASSIN_GEN 2008-01-28 10:28:32
关于dataset的压缩传递,2.0里SerializationFormat.Binary的可以让dataset变成2进制
但是序列化和反序列化要写一段代码,而且传输的时候要用byte数组,我现在想还是传输dataset
但是序列化的行为我自定义一下,所以我定义了WSDataset类,然后传输这个,WSDataset类里有
一个Dataset的数据成员,我想在OnSerializing属性修饰的方法里把dataset设置成空,然后传递
byte数组,但是我发觉调用WEB service的时候OnSerializing属性修饰的方法没有被调用
请问这是怎么回事,或者有没有更好的办法,谢谢。
...全文
320 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
ASSASSIN_GEN 2008-01-29
  • 打赏
  • 举报
回复
回hy_lihuan
可能表达上有误会,我就是想自定义序列化,
因为用2进制序列化可以减少数据量所以就叫他“压缩”了。
我并有修改webservices的标准阿,我就是想在webservices序列化
我的参数的时候,我利用OnSerializing去改变
ppsetserver 2008-01-29
  • 打赏
  • 举报
回复
/// <summary>
/// 返回二进制DataSet,获取该DataSet要对其进行反序列化,大数据DataSet处理方法
/// 反序列化方法如提示
/// MemoryStream ms = new MemoryStream(bUserData);
/// IFormatter bf = new BinaryFormatter();
/// object obj = bf.Deserialize(ms);
/// DataSet dsResult = (DataSet)obj;
/// </summary>
/// <param name="_Sql">SQL语句</param>
/// <param name="_PersonKeys">个人钥匙</param>
/// <returns>byte</returns>
[WebMethod]
public byte[] getByteDataSet(string _Sql, string _PersonKeys)
{
DataSet tempDs = new DataSet();
byte[] bArrayResult = null;
try
{
if (getJudgeKeys(_PersonKeys))
{
tempDs.RemotingFormat = SerializationFormat.Binary;
MemoryStream ms = new MemoryStream();
IFormatter bf = new BinaryFormatter();
bf.Serialize(ms, tempDs);
bArrayResult = ms.ToArray();
ms.Close();
}
return bArrayResult;
}
catch
{
return bArrayResult;
}
}
yjwang0621 2008-01-29
  • 打赏
  • 举报
回复
[Serializable]
public struct DriverInfo
{
public string rybh;
public string jszh;
}


[XmlInclude(typeof(Service2.DriverInfo))]
public DriverInfo[] GetDriver()
{
DriverInfo[] driverList = null;
DataSet ds = new DataSet();
oledbda.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
driverList = new DriverInfo[ds.Tables[0].Rows.Count];
for (int i = 0; i < ds.Tables[0].Rows.Count;i++ )
{
DriverInfo driverInfo = new DriverInfo();
DataRow dr = ds.Tables[0].Rows[i];
driverInfo.rybh = dr["rybh"].ToString();
driverInfo.jszh = dr["jszh"].ToString();
driverList[i] = driverInfo;
}
}
return driverList;
}

不知道这样行不行
ClsData 2008-01-29
  • 打赏
  • 举报
回复
友情支持一下
我以前也遇到过这样的问题
这个帖子给了我很好的解答

http://ghd258.cnblogs.com/archive/2005/12/06/291653.html
ASSASSIN_GEN 2008-01-28
  • 打赏
  • 举报
回复
苦恼啊,谁能告诉我Web service序列化的那步在哪里,有没有办法干预
谢谢了
paulyjin 2008-01-28
  • 打赏
  • 举报
回复
不懂,帮你顶
ASSASSIN_GEN 2008-01-28
  • 打赏
  • 举报
回复
to zbjg
你说得没错,我说的压缩的意思就是使用了2进制以后数据量变少了
你说的4点我能够实现,但是这样webservice就要传递byte数组了
我现在就是不想传递byte数组,想将序列化和反序列透明,所以自己搞了个类
然后用OnSerializing,想在webservice序列话之前调用我的函数,但是不成功
用ISerializable也不成功。
bwangel 2008-01-28
  • 打赏
  • 举报
回复
不太熟这方面的应用。不过一般都是要重写基类的方法才会调用。比如 protected override void OnSerializing()
TomatoZhang 2008-01-28
  • 打赏
  • 举报
回复
学习 帮你顶
zbjg 2008-01-28
  • 打赏
  • 举报
回复
数据的压缩应该是单独的算法,二进制的序列化应该不包括压缩。
你的问题应该有专用的压缩算法 A与B通信
1. A端,序列化DataSet为二进制
2. A端,压缩Byte数组
3. B端,收到Byte数组并解压
4. B端,反序列化二进制为DataSet
ASSASSIN_GEN 2008-01-28
  • 打赏
  • 举报
回复
to mufengwsp2004
为什么呢,能详细一点嘛

现在我觉得问题可能出在webservice这里
我想当然得认为webservice传递的时候会序列化,自然也会用我的函数
可能不是这样,或者用别的什么办法达到我的目的,大家看看,谢谢
草原可可 2008-01-28
  • 打赏
  • 举报
回复
这个好像调用不了
AppFramework 2008-01-28
  • 打赏
  • 举报
回复
压缩用 ZipLib. 序列化用 BinaryFormatter.Serialize.
wxg22526451 2008-01-28
  • 打赏
  • 举报
回复
up
zhuanshen712 2008-01-28
  • 打赏
  • 举报
回复
顶。
hy_lihuan 2008-01-28
  • 打赏
  • 举报
回复
个人认为:webservice是一个标准,你应该是不能去修改你传输的标准的,至于你是不是先压缩,再解压;
这都不应该在序列化这一步去实现。个人理解,实际中并没有遇见过这样的问题
ASSASSIN_GEN 2008-01-28
  • 打赏
  • 举报
回复
现在好像又有点曙光了 http://msdn2.microsoft.com/zh-cn/library/esw638yk(VS.80).aspx
用SOAP扩展
tianke3477 2008-01-28
  • 打赏
  • 举报
回复
不懂,帮你顶
ASSASSIN_GEN 2008-01-28
  • 打赏
  • 举报
回复
苦恼啊,谁能告诉我Web service序列化的那步在哪里,有没有办法干预
谢谢了

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧