无法建立连接,因为目标计算机主动拒绝它127.0.0.1:3446

fib*_*ics 67 c# rest wcf httpwebrequest

我正在使用WCF4.0模板 - REST.我正在尝试创建一个使用流上传文件的方法.

问题总是发生在

Stream serverStream = request.GetRequestStream();
Run Code Online (Sandbox Code Playgroud)

流媒体类:

namespace LogicClass
{
    public class StreamClass : IStreamClass
    {
        public bool UploadFile(string filename, Stream fileStream)
        {
            try
            {
                FileStream fileToupload = new FileStream(filename, FileMode.Create);
                byte[] bytearray = new byte[10000];
                int bytesRead, totalBytesRead = 0;
                do
                {
                    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); }
            return true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

REST项目:

[WebInvoke(UriTemplate = "AddStream/{filename}", Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
public bool AddStream(string filename, System.IO.Stream fileStream)
{
    LogicClass.FileComponent rest = new LogicClass.FileComponent();
    return rest.AddStream(filename, fileStream);
}
Run Code Online (Sandbox Code Playgroud)

Windows窗体项目:用于测试

private void button24_Click(object sender, EventArgs e)
{
    byte[] fileStream;
    using (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();
    }

    string baseAddress = "http://localhost:3446/File/AddStream/stream.txt";
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(baseAddress);
    request.Method = "POST";
    request.ContentType = "text/plain";
    Stream serverStream = request.GetRequestStream();
    serverStream.Write(fileStream, 0, fileStream.Length);
    serverStream.Close();
    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
    {
        int statusCode = (int)response.StatusCode;
        StreamReader reader = new StreamReader(response.GetResponseStream());
    }
}
Run Code Online (Sandbox Code Playgroud)

我关闭了防火墙和我的Internet连接,但错误仍然存​​在.有没有更好的方法来测试上传方法?

堆栈跟踪:

System.Net.Socket.Net.Service.ConnectSocketInternal上的System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress)(布尔值connectFailure,套接字s4,套接字s6,套接字和套接字,IP地址和地址,ConnectSocketState状态,IAsyncResult asyncResult,Int32超时,异常和例外)

Yau*_*aur 130

"主动拒绝它"意味着当您尝试连接时,主机发送了重置而不是确认.因此,您的代码不是问题.有防火墙阻止连接或托管服务的进程没有侦听该端口.这可能是因为它根本没有运行,或者因为它正在侦听不同的端口.

一旦启动托管服务的进程,请尝试netstat -anb(需要管理员权限)以验证它是否正在运行并侦听预期的端口.

更新:在Linux上,您可能需要做netstat -anp.

  • 感谢`netstat -anb`,我在列表中找不到端口.你知道一些可能的步骤来解决这个问题吗?我已关闭防火墙,禁用防病毒并禁用互联网连接,但仍然存在错误. (4认同)
  • "你如何主持这项服务?" 这真让我停下来想了一会儿.我尝试运行我的托管服务的休息项目到3445并运行Windows窗体项目并将主机定位到3445.一切都很顺利.谢谢!谢谢大家 你帮助了我很多. (2认同)

gra*_*vic 13

您不必重新启动PC.改为重新启动IIS.

运行 - >'cmd'(作为管理员)并输入"iisreset"

  • 啊太棒了!重新启动“iis”为我解决了这个问题。其他解决方案都不起作用 这个被低估了! (2认同)