我现在初步发现了一个原因:我尝试将取得的数据大小减少,后来就可以进行运行,这样可能是数据太大的原因,但是又产生了2个问题:
1、我上载数据时很快,为什么同样的数据下载获取数据反而非常非常慢呢?
2、程序运行时通过了获取数据的方法后,为啥此时不能判断获取的数据大小?代码如下:
Var
  FileData: TByteDynArray;
begin
  FileData := (WebCacheHTTPRIO as CacheWs).downLoadWebDataStreamWS(SID);
  if high(FileData ) = -1 then  //在此处抛出异常
  begin
    Result:='在调用Web Service远程方法 downLoadWebDataStreamWS时出错!';  
    exit;
  end;
end;

解决方案 »

  1.   

    你应该将你使用Webservice的DELPHI代码单独一个线程,那样客户端才不会死掉。不使用线程,等待传输传大量数据,不死掉才怪:)
      

  2.   

    你的方法应该是返回ArrayOfByte
    那么你直接用length测量一下就OK罗
      

  3.   

    还有,对于Webservice传输二进制数据,最好对其进行base64编码,这样传输的兼容性才好。delphi自带的Indy有问题,你需要升级到indy10才能正确base64编码。
      

  4.   

    首先,非常感谢applebomb(袋装苹果) 的热情支持!
    我根据你的建议做了尝试,仍然抛出异常“...Class EvariantIncalidArgError with message‘Invalid Argument’.Process stopped....”
    不知要如何处理呢?
      

  5.   

    用base64编码后的String来传输数据,不要用byte[],然后DELPHI自动生成WebService Client代码。用String传输,还有啥搞不定的?
      

  6.   

    谢谢applebomb(袋装苹果)!
    使用你的建议,已经基本可以了,但现在还有一个问题,就是Java端经过base64编码后,在Delphi端取到该数据时,发现结果数据中增加了‘#$A’这种标识字符,每隔一段数据就有这样的字符,该如何处理掉这些多余的字符呢?
      

  7.   

    我没有用base64,就是array of byte.好像传图片还不错.没有发现有任何问题.exe还没有试过