2013-07-19 1 views
1

내 클라이언트 응용 프로그램에서 우리 webservice에서 큰 바이너리 파일을 다운로드하는 데 문제가 있습니다. 상위 OS를 실행하는 다른 시스템에서는 발생하지 않으며 대부분의 작은 파일 크기에서는 발생하지 않습니다. 이유가 무엇이든, 앱은 첫 번째 While 루프 내에서 실패하고, 검색 량이 지금까지는 도움이되지 못했습니다.큰 파일 다운로드 중 Winforms XP에서 소켓 오류가 발생했습니다.

코드 :

Try 
     Dim strWebRequestUrl As String = (url ommited) 
     Dim fileSize As Int64 = Nothing 
     Dim reqDownload As HttpWebRequest = HttpWebRequest.Create(strWebRequestUrl) 
     Dim resDownload As HttpWebResponse = reqDownload.GetResponse 
     Dim streamDownload As Stream = Nothing 
     Dim bytesToRead As Int64 = Nothing 
     Dim totalBytes As Int64 = Nothing 
     Dim bytesRead As Int64 = Nothing 
     Dim saveLocation As String = Nothing 
     Dim saveExt As String = resDownload.GetResponseHeader("EXTENSION") 
     Dim fstr As FileStream = Nothing 
     Dim downloadPercent As String = "0%" 
     fileSize = resDownload.ContentLength 
     'This is just logging stuff: 
     StrDebugStatus = "Step_Row_ID downloaded file size: " & fileSize 
     LogDebug(StrDebugStatus) 
     streamDownload = resDownload.GetResponseStream 
     Dim inBuf(fileSize) As Byte 
     bytesToRead = CInt(inBuf.Length) 
     totalBytes = CInt(inBuf.Length) 
     bytesRead = 0 
     While bytesToRead > 0 
      Dim n As Int64 = streamDownload.Read(inBuf, bytesRead, bytesToRead) 
      If n = 0 Then 
       Exit While 
      End If 
      bytesRead += n 
      bytesToRead -= n 
      downloadPercent = FormatPercent(bytesRead/totalBytes, 0) 
      StrAppStatus = bytesRead & "b" & " | " & downloadPercent 
      LogMe(StrAppStatus) 
     End While 

그런 다음 파일을 작성하는 계속된다. 파일을 쓰는 것이 문제가 아니며, While 문을 통해 첫 번째 루프 내에서 오류가 발생합니다 ... 다시 말하지만, 이것은 약 100MB 이상의 파일에서만 발생하며 XP 시스템에서만 발생합니다. 어떤 도움이라도 대단히 감사하겠습니다. |

2013년 7월 19일 오전 10시 15분 2초 : 여기

가 발생할 때 내 로그 파일에 저장됩니다 오류의 출력 Step_Row_ID 다운로드 파일 크기 : 134246639

7/19/2013 10:15:02 AM | 2594b | 0 %

7/19/2013 10:15:02 AM | Step_Row_ID에서 보고서를 다운로드하는 중 오류가 발생했습니다 : 4533 : 전송 연결에서 데이터를 읽을 수 없습니다 : 시스템에 충분한 버퍼 공간이 없거나 큐가 가득 차서 소켓 작업을 수행 할 수 없습니다. | System.Net.Sockets.SocketException : 시스템에 충분한 버퍼 공간이 없거나 큐가 가득 차서 소켓 작업을 수행 할 수 없습니다. at System.Net.Sockets.Socket.Receive (Byte [] buffer, Int32 offset, INT32 크기 SocketFlags socketFlags) System.Net.Sockets.NetworkStream.Read에서 (바이트 [] 버퍼 오프셋 INT32, INT32 사이즈)

EDIT : 갱신으로 는,이 코드는 다음과 같은 파일 크기 작동 아무 문제없이 :

7/19/2013 1:23:32 PM | Step_Row_ID 4540 다운로드 완료 : | 29257728b read

위의 큰 파일 크기를 사용하면 다운로드 할 때마다 다른 크기의 바이트 (아래 로그를보고 위의 로그를보고 다른 바이트 수가 아직 같은 오류입니다 ...) :

7/19/2013 1:23:38 PM | Step_Row_ID 다운로드 파일 크기 : 134246639b

7/19/2013 1:23:38 PM | 3770b | 0 %

7/19/2013 1:23:38 PM | 12814b | 0 %

7/19/2013 1:23:38 PM | 25954b | 0 %

7/19/2013 1:23:38 PM | 28658b | 0 %

7/19/2013 1:23:38 PM | Step_Row_ID에서 보고서를 다운로드하는 중 오류가 발생했습니다 : 4533 : 전송 연결에서 데이터를 읽을 수 없습니다 : 시스템에 충분한 버퍼 공간이 없거나 큐가 가득 차서 소켓 작업을 수행 할 수 없습니다. | System.Net.Sockets.SocketException : 시스템에 충분한 버퍼 공간이 없거나 큐가 가득 차서 소켓 작업을 수행 할 수 없습니다. at System.Net.Sockets.Socket.Receive (Byte [] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) at System.Net.Sockets.NetworkStream.읽기 (바이트 [] 버퍼, INT32 오프셋, INT32 크기)

+0

당신은 그것을 해결할 수 있습니까? – gsubiran

답변

0

나의 사과, 이것은 답이 갔다 실현되지 않았다.

는 약간 다른 방향으로가는 상처와 WebClient.getfile 프로세스를 사용하기로 결정했습니다. 우리는 생산이 밀어 이후

그것은 실제로 잠시있다, 그래서 정확한 코드 세트를 기억할 수 있지만, 본질적으로 우리는 바이트 읽기에 대한 필요성을 제거.

이 질문을 닫습니다.

관련 문제