请教stdotleo、tomgus等各位高手!顺便散分~

lovvver 2006-09-11 06:06:38
问题描述:
我做了一个程序(c/s),采用WebService通讯模式,由于数据的保密性等缘故,我对通过WebService传输的数据都做了加密/压缩-解密/解压处理,基本思路如下:
加密,压缩->WebService传输->解压,解密->服务端处理完后,将处理结果加密,压缩->WebService传输->传回客户端时,解压,解密。在传一般的文件比如2-3M的文件,一切正常,但是当传大文件,比如>=20M的文件时,就会抛出异常:
This is an unexpected token.The expected token is 'QUOTE'.Line 7,Position 22.
我做了一些跟踪,发现是在解压,解密时抛的异常,但是一直无法找到问题的根本原因。
(加密,压缩处理的代码见[测试代码])

测试代码:
我做了一个测试程序,在运行测试程序时,可以明显的看出问题,下载地址:
www.notsoft.cn/bright/WSTest.rar
a.程序打开后,重新加一下SharpZipLib.dll的引用;
b.准备两个txt文件,一个20M,一个2M。

欢迎stdotleo、tomgus等各位高手来探讨这个问题!!!非常感谢!顺便问候一下在线的各位同行们!

...全文
472 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingyaohua 2006-10-01
  • 打赏
  • 举报
回复
10.1也来顶
vivianfdlpw 2006-09-30
  • 打赏
  • 举报
回复
配置IIS的应用程序池取消回收工作进程或者把内存调大些
lovvver 2006-09-27
  • 打赏
  • 举报
回复
测来测去,原来是客户端内存不足造成的问题。
Application log:
aspnet_wp.exe (PID: 3324) was recycled because memory consumption exceeded the 287 MB (60 percent of available RAM).

在WebService中,我直接传字符(SKY(大红)的建议),如:
public string GetFileString(int num)
{
return new string('a', num);
}
我在客户端测试,在输入41,943,040(40MB)时可以返回,当输入83,886,080(80MB)时,就抛错误了,错误日志中信息如上。
如果我加上加密/压缩-解压/解密处理时,我用20,971,520(20MB),就挂了。

============================
根据以上测试,可以得出,用WebService传输数据,当数据量比较大,而有可能会因此站用超过60%可用内存时,asnet_wp.exe进程就有可能被回收,也就是传输失败。

那么如何能够做到传输数据大小与客户端内存无关呢?比如用http下载大文件,文件再大,只是下载时间长,而不会因此占用过多内存。这个在WebService里该如何实现呢?
欢迎各位帮顶!更欢迎各位参与讨论!!
petshop4 2006-09-20
  • 打赏
  • 举报
回复
~~~~路过~~~~~

友情UP..........
odin223 2006-09-19
  • 打赏
  • 举报
回复
up
califord 2006-09-18
  • 打赏
  • 举报
回复
那我就接分呀
lovvver 2006-09-18
  • 打赏
  • 举报
回复
to Knight94(愚翁) :
<httpRuntime maxRequestLength="1048576"/>//=1G
压缩比不是很高,压缩后的数据,比原先的数据可能只会少个几M吧。
路人霆 2006-09-18
  • 打赏
  • 举报
回复
顶顶顶。
Knight94 2006-09-16
  • 打赏
  • 举报
回复
to 经过最近测试发现,出现上面问题的不是代码原因,而可能是WebService的架构原因,WebService适合去传输大数据(上10M,甚至几十M)吗?对于采用WebService通讯架构的系统,需要传输几十M的大数据,怎样做比较好呢?

你最好看看加密压缩后,数据大概是多少。

至于asp.net程序来说,通过类似设置<httpRuntime maxRequestLength="102400"/>,可以设置请求最大长度(我试过70M,传输成功)。
kc2203 2006-09-15
  • 打赏
  • 举报
回复
UP
UP
UPPPPPPPPPPPP
lovvver 2006-09-15
  • 打赏
  • 举报
回复
经过最近测试发现,出现上面问题的不是代码原因,而可能是WebService的架构原因,WebService适合去传输大数据(上10M,甚至几十M)吗?对于采用WebService通讯架构的系统,需要传输几十M的大数据,怎样做比较好呢?

各位兄弟们帮顶啊~!
lovvver 2006-09-14
  • 打赏
  • 举报
回复
顶起~!
wully 2006-09-14
  • 打赏
  • 举报
回复
路过
lovvver 2006-09-14
  • 打赏
  • 举报
回复
加解密用的是别人写的一个类,RSA,见测试代码[Encryptor.cs]。
Knight94(愚翁),你可以下载测试代码看看:
www.notsoft.cn/bright/WSTest.rar
多谢帮忙~!
懒是一种态度 2006-09-14
  • 打赏
  • 举报
回复
友情up!~
接分万岁。

楼主万岁。。。。
arlong0419 2006-09-13
  • 打赏
  • 举报
回复
友情up!~
lovvver 2006-09-13
  • 打赏
  • 举报
回复
看来很少人做这一块的啊
帮顶啊,继续等。
Knight94 2006-09-13
  • 打赏
  • 举报
回复
加解密用的什么做的
lovvver 2006-09-12
  • 打赏
  • 举报
回复
加密/压缩是放在Attribute里实现的,在GetFileString方法上面你应该看到[CompressionEncryption]。
TTLOVEYOU3344 2006-09-12
  • 打赏
  • 举报
回复
刚刚仔细看了代码,怎么你的加密解密没放到TEST页面去啊,只是单纯的一个读文件的函数.
加载更多回复(10)

12,162

社区成员

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

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