Stream serverStream = request.GetRequestStream();; <p>串流類別:</p>
命名空間 LogicClass { 公共類別 StreamClass :IStreamClass { 公有布林UploadFile(字串檔名,流檔流) { 嘗試 { FileStream fileToupload = new FileStream(檔案名稱, FileMode.Create); byte[] bytearray = 新字節[10000]; int bytesRead, 總位元組數 = 0; 做 { bytesRead = fileStream.Read(bytearray, 0, bytearray.Length); 讀取總位元組數 = 讀取位元組數; while (bytesRead > 0); fileToupload.Write(bytearray, 0, bytearray.Length); fileToupload.Close(); fileToupload.Dispose(); } catch (Exception ex) { 拋出新的 Exception(ex.Message); } 返回真; } } }</pre> <p>休息項目:</p>[WebInvoke(UriTemplate = "AddStream/{filename}", Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)] public bool AddStream(字串檔名, System.IO.Stream fileStream) { LogicClass.FileComponent 休息 = new LogicClass.FileComponent(); 返回rest.AddStream(檔名, fileStream); }</pre> <p>Windows 表格項目:用於測試</p> <pre class="brush:php;toolbar:false;">private void button24_Click(object sender, EventArgs e) { 位元組[]檔案流; 使用 (FileStream fs = new FileStream("E:\stream.txt", FileMode.Open, FileAccess.Read, FileShare.Read)) { fileStream = new byte[fs.Length]; fs.Read(fileStream, 0, (int)fs.Length); fs.Close(); fs.Dispose(); } 字串baseAddress =“http://localhost:3446/File/AddStream/stream.txt”; HttpWebRequest 請求 = (HttpWebRequest)HttpWebRequest.Create(baseAddress); 請求方法 = "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()); } }</pre> <p>我已關閉防火牆和互聯網連接,但錯誤仍然存在。有沒有更好的方法來測試上傳方法? </p> <p>堆疊追蹤:</p> <blockquote> <p>在 System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress 套接字位址) 在 System.Net.ServicePoint.ConnectSocketInternal(布林 connectFailure、Socket s4、Socket s6、Socket& 套接字、IPAddress& 位址、ConnectSocketState 狀態、IAsyncResult asyncResult、Int32 逾時); </blockquote><p><br /></p>
P粉2708426882023-08-28 09:47:01
「主動拒絕」表示當您嘗試連線時主機發送了重置而不是確認。因此,這在您的程式碼中不是問題。防火牆阻止連接,或託管服務的進程未偵聽該連接埠。這可能是因為它根本沒有運行或因為它正在偵聽不同的連接埠。
啟動託管服務的進程後,請嘗試使用netstat -anb
(需要管理員權限)來驗證它是否正在執行並偵聽預期的連接埠。
更新:在 Linux 上,您可能需要執行 netstat -anp
。