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

C# 无法建立连接,因为目标计算机主动拒绝127.0.0.1:3446,c#,wcf,rest,httpwebrequest,C#,Wcf,Rest,Httpwebrequest,我正在使用WCF4.0模板-。我正在尝试创建一个使用流上传文件的方法 问题总是发生在某个时刻 Stream serverStream = request.GetRequestStream(); 流媒体类: namespace LogicClass { public class StreamClass : IStreamClass { public bool UploadFile(string filename, Stream fileStream)

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

问题总是发生在某个时刻

Stream serverStream = request.GetRequestStream();
流媒体类:

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;
        }
    }
}
休息项目:

[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);
}
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());
    }
}
我已关闭防火墙和Internet连接,但错误仍然存在。有没有更好的方法来测试上传方法

堆栈跟踪:

位于System.Net.Sockets.Socket.DoConnect(端点端点快照,SocketAddress SocketAddress) 在System.Net.ServicePoint.ConnectSocketInternal(布尔连接失败、套接字s4、套接字s6、套接字和套接字、IP地址和地址、ConnectSocketState状态、IAsyncResult asyncResult、Int32超时、异常和异常)


检查是否有其他程序正在使用该端口

如果同一程序的实例仍处于活动状态,请终止该进程。

“主动拒绝”表示主机在您尝试连接时发送了重置而不是ack。因此,这在代码中不是问题。可能是防火墙阻止了连接,或者承载服务的进程没有侦听该端口。这可能是因为它根本没有运行,或者是因为它正在另一个端口上侦听

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


更新:在Linux上,您可能需要执行
netstat-anp

如果您使用WCF storm,您甚至可以登录到WCF服务端点吗?如果不是,并且您将其托管在Windows服务中,则可能忘记注册该命名空间。这不是很好的宣传,这一步是必需的,实际上这是烦人的做


我用;它自动化了所有这些繁琐的步骤。

我收到了类似的错误消息,如TCP错误代码10061:无法建立连接,因为目标机器在我当前的项目中主动拒绝了它。我发现这个10061错误代码无法区分服务端点未启动和被防火墙阻止的情况。通常,防火墙可以关闭,但问题仍然存在

您可以通过以下两种方式测试代码

  • 插入代码以获取服务启动的时间A和客户端向服务器发送请求的时间B。如果B早于A,则可能导致此问题
  • 将服务器端口更改为系统中也可用的另一个端口。您将发现报告了相同的错误代码

  • 以上是我的解决方案。它在我的机器上工作。我希望有帮助

    我也有类似的问题。在我的例子中,服务在开发人员机器上可以正常工作,但在QA机器上失败。结果表明,在QA计算机上,应用程序不是以管理员身份运行的,并且没有注册端点的权限:

    HTTP无法注册URL。你的过程确实如此 没有对此命名空间的访问权限(请参阅 详细信息)


    请参阅此处,了解如何在不使用管理员用户的情况下使其工作:

    您不必重新启动电脑。请重新启动IIS

    运行->cmd(以管理员身份)并键入“iisreset”


    检查您网页的Web.config文件中的端口号是否与托管的端口号相同。

    由于此错误,我能够跟踪它,多亏了@Yaur,您需要基本上检查服务(WCF)如果它正在运行,请检查advance firewall设置中的出站和入站TCP属性。

    我的web服务器上也有同样的问题“无法建立连接,因为目标计算机主动拒绝了它161.x.x.235:5672”。我让管理员打开web服务器上的5672端口,然后它工作正常。

    我也遇到了类似的问题 拒绝localhost和127.0.0.1。 cmd(admin)
    netstat-anb
    发现端口运行在169.254.80.80上(不知道ip来自何处,因为我的网络ip是10.0.0.5)。 在加入这个IP之后,它工作了。 这提供了正确的IP:

    IPAddress ipAddress = ipHostInfo.AddressList[0];
    Console.WriteLine(ipAddress.ToString());
    

    使用类似的模式,我的rest客户端正在调用服务API,该服务在调试时成功调用,但未处理发布的代码。错误是:无法连接到远程服务器

    内部异常:System.Net.Sockets.SocketException(0x80004005):无法建立任何连接,因为目标计算机主动拒绝它在System.Net.ServicePoint.ConnectSockets.Socket.DoConnection(EndPoint endPointSnapshot,SocketAddress SocketAddress)的System.Net.ServicePoint.ConnectSocketInternal上的服务IP:443(布尔连接失败、套接字s4、套接字s6、套接字和套接字、IPAddress和address、ConnectSocketState状态、IAsyncResult asyncResult、异常和异常)

    解决方案:在Web配置中设置代理

    <system.net>
        <defaultProxy useDefaultCredentials="true">
          <proxy proxyaddress="http://proxy_ip:portno/" usesystemdefault="True"/>
        </defaultProxy>
    </system.net>
    

    您必须设置系统代理 你必须走这条路 控制面板>>互联网选项>>连接>>局域网设置>> 代理
    没有技巧:使用代理服务器

    我在C#中的.Net远程处理服务中也遇到了问题

    我通过三个步骤解决了这个问题:

  • 更改正在使用的所有文件中的协议端口
  • 运行主机服务器程序并将其激活
  • 现在运行客户端程序

  • 我也有类似的问题。在我的案例中,VPN代理应用程序(如Psiphon)更改了windows中的代理设置,因此请遵循以下步骤:

    在Windows 10中,在手动代理中搜索“更改代理设置”并启用代理服务器


    请确保应用程序使用的所有服务都已打开,这些服务正在使用主机和端口来使用它们。例如,在我的例子中,如果应用程序正在使用Redis服务器,并且无法在给定的端口和主机上连接到该服务器,则可能会出现此错误,从而产生此错误。

    我无法重新启动IIexpress。这是解决方案这对我很有用

  • 清理了建筑
  • 重建

  • 对于我的例子,我有一个角度SLA项目模板