webservice 传送大对象问题,急急!!!!!!!!!!!!!!

whmjw 2011-12-07 02:44:36
webservice 传送大对象问题,急急!!!!!!!!!!!!!!

现在我们的项目是基于ef4.1 ,web service ,linq to ef,不是asp.net ,而是winform
开发环境.net4.0,vs2010,
所有数据库访问访问都是通过Webservice返回
返回的就是一个实体类,前台调用这个来绑定Devexpress 的gridcontrol

比如如下所示
#region 根据流水号得到相应的未结消费
[WebMethod]
/// <summary>
/// 根据流水号得到相应的未结消费
/// </summary>
/// <param name="waternum"></param>
/// <returns></returns>
public List<V_ConsumeTemp> GetAllConsumeByWaternum(List<Guid> waternum)
{
try
{
return this.commonService.GetAllConsumeByWaternum(waternum).ToList();
}
catch(Exception ex)
{

}
return null;
}
#endregion

List<V_ConsumeTemp> 就是一个对象,里面有70个字段
如果里里面的行数可能会达到1 万多行数据,那返回就很慢了
由于以前的程序用2003写的直接返回Datatable,没有webservice这么慢
大家也不要说让我分页了,Winform程序基本上没有分页的习惯


前台代码,调用 Webservice
#region 根据流水号得到相应的未结消费
/// <summary>
/// 根据流水号得到相应的未结消费
/// </summary>
/// <param name="waternum"></param>
/// <returns></returns>
public static List<V_ConsumeTemp> GetAllConsumeByWaternum(List<Guid> waternum)
{
return commonService.GetAllConsumeByWaternum(ToProxyType<Guid,ArrayOfGuid>(waternum)).ToList();
}
#endregion
请问有什么好的方法能压缩一下,如果大家说用在webservice 端 zip压缩,然后传送Byte[]
那这样一来,前台就不知道要转换成什么 样的类别 了


因为上面的Web方法,在前台调用时就已经是V_ConsumeTemp这个实体类了
如果Web 端压缩 成byte[]
那 return commonService.GetAllConsumeByWaternum(ToProxyType<Guid,ArrayOfGuid>(waternum)).ToList();
这一句话怎么从bute[] 转化为List<V_ConsumeTemp>?


另再提一个问题V_ConsumeTemp这个实体类我只想要一部分的字体的数据,就是说这个里70个字段属性,我只想取其中2,3个字段
在linq 里可以用 select(new {x.ddd,x.aaa}这样用
不过这样一来,我就又得新增一个类别
比如
public class tempddd
{
public string ddd{get;set;}
public string aaa{get;set;}
)
在web service
端 代码 就变成

public List<tempddd> GetAllConsumeByWaternum(List<Guid> waternum)
{
try
{
return this.commonService.GetAllConsumeByWaternum(waternum).select(new {x.ddd,x.aaa}.tolist() ;
}
catch(Exception ex)
{

}
return null;
}

有没有 什么 简单的方法 不用
public class tempddd
{
public string ddd{get;set;}
public string aaa{get;set;}
)
生成这些类?通过动态来产生类 tempddd
...全文
1695 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcj1018_net 2012-02-22
  • 打赏
  • 举报
回复
最好用json
duyongfeng1985 2012-02-22
  • 打赏
  • 举报
回复
实体类,你的接口没有通用性了,用XML或json传递数据吧
千里之外 2012-02-21
  • 打赏
  • 举报
回复
你可以用存储过程分页啊 加两个参数 这样数据不就少了吗?比如说1,2000 表示第一页 每页2000条数据 另外你可以尝试异步调用webservice啊。个人建议 仅供参考 呵呵!
cuiweifu 2012-01-30
  • 打赏
  • 举报
回复
你的从业务上去考虑分页传输, 或者逐批次的进行传输.
cfvgodot 2011-12-29
  • 打赏
  • 举报
回复
再弄一层DTO,这一层专门负责前端需求的视图结果,直接从实体类里填充到这一层的类里,这是最好的方式,有效,快速,直观,性能高。

如果你不打算用DTO,给前段序列化的时候实体类指定序列化哪些字段,这样就避免全部序列化了。

至于压缩的问题,如果不是处于外网环境下,完全不用考虑这个事情,内网里边这么点数据的传输时间完全可以忽略不计,如果是外网,除了考虑压缩之外,还更应该考虑避免大对象的传递,WINFORM和WEB没什么区别,异步也不是WEB的专有,异步的出现只是为了解决问题,解决大数据读取时“等待”的问题,你用EF4.1的话应该知道啥是延迟加载吧?那为什么要用延迟加载?分页只是一种视图习惯而已,如果送显到用户的话,分页我觉得完全有必要,不分页的做法是二十年前PB的年代,在信息量激增的年代里才出现了分页。。。异步。。压缩等等。二十年前你不是那么容易就可以找到千万行的数据库……


computer_li 2011-12-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sp1234 的回复:]

引用 6 楼 charles_y 的回复:

有什么关系,分10次甚至20次传好了,不过压缩还是必须得。
一次传大量的数据很容易失败,毕竟网络状况是不可控的。


是滴!

写一个循环来读取数据,每一次都是从第n行开始的100条数据,这样取10000条数据的过程中lz还可以给用户异步展现一个漂亮的进度条呢!
[/Quote]

刚处理了这个问题,序列化后压缩传输,只是压缩比不是很满意,才瘦身了1/3 ,要是能压缩为原来的1/3就好了
,而且我处理的是10w数据传输,想一次读取传输,不现实,只能分批读取传输。
longxin2 2011-12-15
  • 打赏
  • 举报
回复
这种问题太高深了,未懂
宝_爸 2011-12-13
  • 打赏
  • 举报
回复
如果必须要在网络上传输的话,分页,或者Filter是最终的选择。
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 charles_y 的回复:]

有什么关系,分10次甚至20次传好了,不过压缩还是必须得。
一次传大量的数据很容易失败,毕竟网络状况是不可控的。
[/Quote]

是滴!

写一个循环来读取数据,每一次都是从第n行开始的100条数据,这样取10000条数据的过程中lz还可以给用户异步展现一个漂亮的进度条呢!
charles_y 2011-12-12
  • 打赏
  • 举报
回复
有什么关系,分10次甚至20次传好了,不过压缩还是必须得。
一次传大量的数据很容易失败,毕竟网络状况是不可控的。
whmjw 2011-12-07
  • 打赏
  • 举报
回复
楼上的朋友 我就是不想手工写些类的代码哦,我在网上找过可以通过传过一个字符 串,能动态生成以这个字符串生成类,再可以添加普通 字段get,set,但到后来就不知道怎么用这传送,就不用了,算了还是老老实实的写吧

楼上说一万多行,这很正常,查看餐饮一个月的明细流水一万还算少的呢(客户就是要这样,他们要导这明细数据,客户就这样要求你总不能说不能导吧?).再说这也是Winfom程序不是Web,web肯定 是要分页了,
charles_y 2011-12-07
  • 打赏
  • 举报
回复
一下子一万多行是做什么用的?传需要传的数据,跟分页无关。
不然的话无论什么压缩都是治标不治本,即使能压缩到1/100有什么样?你的数据要是要到了1百万行呢?
只要传2列数据,完全可以在做一个类。不要想着什么事情都有完美简便的解决方案,数据库为了效率,不是常常还需要加冗余字段吗?

至于压缩,其实微软自己就有压缩类GZipStream,很方便的,即能压缩也能解压
潘少博 2011-12-07
  • 打赏
  • 举报
回复
什么格式压缩传输,什么格式解压,为什么会不知道呢?
传输过来的留,可以进行反序列化,直接得到传输的结果。
内容概要:本文详细探讨了机组组合优化模型的构建,旨在通过合理安排各类发电机组的启停计划和优化出力分配,实现电力系统在经济性和稳定性上的最佳平衡。文章首先介绍了电力系统的四大主要组件——传统火电机组、风电机组、光伏机组和储能系统的参数及运行特性。接着,围绕最小化系统总运行成本这一目标,设计了优化目标函数,并明确了包括功率平衡约束、机组出力上下限约束、风光发电功率约束、弃风弃光约束、爬坡速率约束、储能系统荷电状态约束、充放电功率约束和充放电互斥约束在内的多项约束条件。最后,文章列出了求解机组组合优化模型所需的关键变量,如传统机组的开停状态、机组出力、启停成本、风电光伏实际出力、弃风弃光比例及储能系统的充放电功率和荷电状态,以实现系统的经济调度和可再生能源的最大化利用。 适合人群:从事电力系统研究、规划和调度工作的工程师和技术人员,以及对电力系统优化感兴趣的科研人员。 使用场景及目标:①帮助电力系统工程师理解不同类型发电机组的特点及其对系统稳定性、经济性和环保性的影响;②为制定合理的电力系统调度策略提供理论依据和技术支持;③促进可再生能源的有效整合,提高电力系统的灵活性和可靠性。 其他说明:本文提供的模型和方法不仅适用于当前的电力系统,也可为未来含高比例可再生能源接入的电力系统提供参考。文中涉及的具体数学公式和参数设定为实际应用提供了详细的指导,有助于提升电力系统的运行效率和经济效益。

12,166

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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