내 클라이언트 응용 프로그램에서 우리 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 다운로드 파일 크기 : 1342466397/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 크기)
당신은 그것을 해결할 수 있습니까? – gsubiran