WCF4.0 템플릿 -REST를 사용하고 있습니다. 스트림을 사용하여 파일을 업로드하는 방법을 만들려고 합니다.
问题总是发生生
Stream serverStream = request.GetRequestStream();
유류式传输类:
네임스페이스 LogicClass { 공개 클래스 StreamClass : IStreamClass { public bool UploadFile(문자열 파일 이름, 스트림 파일 스트림) { 노력하다 { FileStream fileToupload = new FileStream(파일 이름, FileMode.Create); 바이트[] bytearray = 새 바이트[10000]; int bytesRead, totalBytesRead = 0; 하다 { bytesRead = fileStream.Read(bytearray, 0, bytearray.Length); totalBytesRead += bytesRead; } while (bytesRead > 0); fileToupload.Write(bytearray, 0, bytearray.Length); fileToupload.Close(); fileToupload.Dispose(); } catch (Exception ex) { throw new Exception(ex.Message); } 사실을 반환; } } }
REST 项目:
[WebInvoke(UriTemplate = "AddStream/{filename}", 메서드 = "POST", BodyStyle = WebMessageBodyStyle.Bare)] public bool AddStream(문자열 파일 이름, System.IO.Stream 파일 스트림) { LogicClass.FileComponent 나머지 = new LogicClass.FileComponent(); return Rest.AddStream(파일 이름, fileStream); }
Windows 窗体项目:用于测试
private void 버튼24_Click(객체 전송자, EventArgs e) { 바이트[] 파일스트림; (FileStream fs = new FileStream("E:stream.txt", FileMode.Open, FileAccess.Read, FileShare.Read)) 사용 { fileStream = 새 바이트[fs.Length]; fs.Read(fileStream, 0, (int)fs.Length); fs.닫기(); fs.Dispose(); } string baseAddress = "http://localhost:3446/File/AddStream/stream.txt"; HttpWebRequest 요청 = (HttpWebRequest)HttpWebRequest.Create(baseAddress); request.Method = "POST"; request.ContentType = "텍스트/일반"; 스트림 serverStream = request.GetRequestStream(); serverStream.Write(fileStream, 0, fileStream.Length); serverStream.Close(); (HttpWebResponse 응답 = request.GetResponse()를 HttpWebResponse로 사용) { int statusCode = (int)response.StatusCode; StreamReader 리더 = new StreamReader(response.GetResponseStream()); } }
저는 인터넷을 통해 인터넷을 이용하고 있습니다.업로드 방법을 테스트하는 더 좋은 방법이 있습니까?
스택 추적:
<인용문>System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress 소켓 주소) System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, 소켓 s4, 소켓 s6, 소켓& 소켓, IPAddress& 주소, ConnectSocketState 상태, IAsyncResult asyncResult, Int32 시간 제한, 예외& 예외)
컴퓨터를 다시 시작할 필요가 없습니다. 대신 IIS를 다시 시작하십시오.
"활성 거부"는 연결을 시도했을 때 호스트가 승인 대신 재설정을 보냈음을 의미합니다. 따라서 이것은 코드에서 문제가 되지 않습니다. 방화벽이 연결을 차단하고 있거나 서비스를 호스팅하는 프로세스가 포트에서 수신 대기하고 있지 않습니다. 전혀 실행되지 않거나 다른 포트에서 수신 대기 중이기 때문일 수 있습니다.
서비스 호스팅 프로세스를 시작한 후
netstat -anb
(관리자 권한 필요)를 사용하여 해당 서비스가 예상 포트에서 실행 중이고 수신 대기 중인지 확인하세요.업데이트: Linux에서는
netstat -anp
을 수행해야 할 수도 있습니다.