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 超时、Exception& 异常)</p> </blockquote><p><br /></p>
P粉2708426882023-08-28 09:47:01
“主动拒绝”意味着当您尝试连接时主机发送了重置而不是确认。因此,这在您的代码中不是问题。防火墙阻止连接,或者托管服务的进程未侦听该端口。这可能是因为它根本没有运行或者因为它正在侦听不同的端口。
启动托管服务的进程后,请尝试使用netstat -anb
(需要管理员权限)来验证它是否正在运行并侦听预期的端口。
更新:在 Linux 上,您可能需要执行 netstat -anp
。