2011-05-19 61 views
2

我有一個客戶端服務器類型的應用程序與服務器運行HttpListener和客戶端上傳數據到服務器使用WebClient.UploadData。代碼工作得很好,除了一個安裝在那裏UploadData超時當數據緩衝區的大小是大是16384。這是我在客戶端代碼(蒙山大數據緩存60K及以上):與WebClient.UploadData的問題

internal bool UploadData(byte[] buffer, String file, String folder) 
{ 
    try 
    { 
     String uri = "http://" + GlobalData.ServerIP + ":" + GlobalData.ServerHttpPort + "/upload:"; 
     NameValueCollection headers = new NameValueCollection(); 
     headers.Set("Content-Type", "application/octet-stream"); 
     headers.Set("Y-Folder", folder); 
     headers.Set("Y-File", file); 
     using (WebClient wc = new WebClient()) 
     { 
      wc.Credentials = new NetworkCredential(WebUserName, WebPassword); 
      wc.Headers.Add(headers); 
      wc.UploadData(new Uri(uri), buffer); 
      return true; 
     } 
    } 
     catch (Exception ex) 
     { 
      GlobalData.ODS("Exception in UploadFile " + ex.Message); 
      return false; 
     } 
    } 

在服務器

ODS(TraceDetailLevel.Level4, "Process upload "); 
HttpListenerResponse response = e.RequestContext.Response; 
String disp = ""; 
String fil = ""; 
String folder = ""; 
Stream body = e.RequestContext.Request.InputStream; 
long len64 = e.RequestContext.Request.ContentLength64; 
Encoding encoding = e.RequestContext.Request.ContentEncoding; 
ODS(TraceDetailLevel.Level4, "Process upload " + len64 + " bytes encoding " + encoding.EncodingName); 
NameValueCollection nvp = e.RequestContext.Request.Headers; 
try 
{ 
disp = nvp["Content-Disposition"]; 
fil = nvp["Y-File"]; 
folder = nvp["Y-Folder"]; 
} 
catch { } 
BinaryReader reader = new BinaryReader(body, encoding); 
byte[] data = new byte[len64]; 
long total = 0; 
while (true) 
{ 
    int dataleft = data.Length - (int)total; 
    int offset = (int)total; 
    GlobalData.ODS("Reading binary stream offset=" + offset + " read dataleft=" + dataleft); 
    int cnt = reader.Read(data, offset, dataleft); 
    if (cnt <= 0) 
    { 
    break; 
    } 
    total += cnt; 
    if (len64 <= total) 
    { 
    break; 
    } 
} 
ODS(TraceDetailLevel.Level4, "Process upload: Got data "+total+" should have="+len64); 
if (total == len64) 
{ 
    //process data 

上述代碼適用於除一個安裝以外的所有安裝。哪裏不對?

+0

想補充說明代碼在局域網上運行,即使客戶端和服務器在同一臺計算機上運行,​​也會發生超時 – alecd4 2011-05-19 05:04:48

回答

5

它看起來像我發現問題的根源。這個安裝問題使我的代碼失敗,並在運行我的HTTP服務器代碼的計算機上安裝了AVG Free Antivirus。如果我在該計算機上禁用AVG,我的代碼就可以運行。想知道是否有人遇到與AVG類似的問題。