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