ChatGPT解决这个技术问题 Extra ChatGPT

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

我正在使用 WCF4.0 模板 -REST。我正在尝试制作一种使用流上传文件的方法。

问题总是发生在

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(EndPoint endPointSnapshot, SocketAddress socketAddress) 在 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout,例外&例外)

您不必担心本地连接的防火墙或 Internet 连接。在您的代码中,您连接到端口 8000,但在您的错误消息中,端口是 3446。这相关吗?
@Graphain 这是一个拼写错误。谢谢你提到它。请看我的编辑。

Y
Yaur

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

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

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


感谢netstat -anb,我在列表中找不到端口。您知道解决此问题的一些可能步骤吗?我已经关闭了防火墙,禁用了防病毒软件并禁用了互联网连接,但仍然存在错误。
您如何托管服务?如果您只是从 Visual Studio 中按下 f5,则它是托管在 iisexpress.exe 中的 IIRC。您可以查看托管进程的相同列表,以确定它正在侦听的端口。
“你们如何主持这项服务?”这真的让我思考了一会儿。我尝试运行将服务托管到 3445 的 rest 项目,并运行 windows 窗体项目并将主机也定位到 3445。然后一切顺利。谢谢!谢谢大家。你帮了我很多。
正如您所说,我已经在我的登台服务器上完成了所有设置(防火墙、端口、启用 WcF 服务),但我仍然遇到同样的错误,请您指导我吗?
@suBDavis -an b 是特定于 Linux 的。原始版本在 Windows 上运行良好(而您的更新版本则不行),这是大多数人用来开发 WCF 服务的平台。也就是说,我已经用 Linux 等价物更新了答案,因为这现在是 google 上与原始问题无关的事情的热门话题。
g
gradosevic

您不必重新启动 PC。而是重新启动 IIS。

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


我在执行 netstat -anb 时看到了端口,并且我还重新启动了服务器。还是同样的错误,有帮助吗?
啊太棒了!重新启动 iis 为我解决了这个问题。没有其他解决方案有效 这个被低估了!
P
Peter Mortensen

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

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

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

以上是我的修复。它适用于我的机器。我希望它有帮助!


你能看看这里吗? stackoverflow.com/questions/52386437/…
p
paiam sahari

你必须设置你的系统代理你必须通过这个路径控制面板>>互联网选项>>连接>>局域网设置>>代理没有tik:使用代理服务器


T
Tanveer-Ibn- Haresh

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

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


我已经做到了,实际上我有一个示例控制台项目来测试端口是否可用。
当我遇到这个问题时,我实际上不得不重新启动我的电脑来释放端口。
您是否尝试过仅更改端口号?我在托管 CruiseControl 时遇到了类似的问题,更改了配置中的端口号,我无法通过 netstat 扫描找到。
您应该发布您的 web.config。我猜端点配置有问题。
C
Community

我有一个类似的问题。就我而言,该服务在开发人员机器上可以正常工作,但在 QA 机器上会失败。事实证明,在 QA 机器上,应用程序没有以管理员身份运行,也没有注册端点的权限:

HTTP 无法注册 URL http://+:12345/Foo.svc/]。您的进程没有对此命名空间的访问权限(有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=70353)。

请参阅此处了解如何在不成为管理员用户的情况下使其工作:https://stackoverflow.com/a/885765/38258


P
Peter Mortensen

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

我使用this tool to do this;它使所有这些繁琐的步骤自动化。


P
Peter Mortensen

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


H
Hung Vu

我在我的网络服务器上遇到了同样的问题“无法建立连接,因为目标机器主动拒绝了它 161.xx235:5672”。我要求管理员在 Web 服务器上打开端口 5672,然后它工作正常。


在您的服务器中,打开具有高级安全性的 Windows 防火墙。添加新的入站/出站 TCP 规则,输入 5672 端口。你最好让网络管理员为你做。
有没有办法知道哪个端口为 SMTP 开放?
s
slfan

我在拒绝 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());

j
jwpfox

我在 C# 中的 .Net Remoting Service 中也遇到了问题。

我通过 3 个步骤解决了它:

更改正在使用的所有文件中的协议端口。运行您的主机服务器程序并使其处于活动状态。现在运行您的客户端程序。


H
Hasta Dhana

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

清理构建重建


P
PinoyDev

有了这个错误,我能够跟踪它,感谢@Yaur,您基本上需要检查服务(WCF)是否正在运行,并检查您的高级防火墙设置上的出站和入站 TCP 属性。


S
SFK

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

内部异常:System.Net.Sockets.SocketException (0x80004005):无法建立连接,因为目标机器主动拒绝它 serviceIP:443 at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net .ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& 套接字, IPAddress& 地址, ConnectSocketState 状态, IAsyncResult asyncResult, Exception& 异常)

解决方法:在 Web config 中设置代理。

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

A
Ali Besharati

我有一个类似的问题。在我的情况下,VPN 代理应用程序(例如 Psiphon ،)更改了 Windows 中的代理设置,因此请遵循以下步骤:

在 Windows 10 中,在手动代理中搜索更改代理设置和使用代理服务器


F
Farhan

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


A
Arsen Khachaturyan

就我而言,我有一个带有 ASP.NET Core 的 Angular SLA 项目模板。

我试图从 Visual Studio WebUI 解决方案运行 IIS Express,触发“主动拒绝它”错误。

https://i.stack.imgur.com/JKNJf.png

在这种情况下,问题与阻止连接的防火墙无关。

事实证明,我必须独立于 Kestrel 运行来运行 Angular 服务器,因为服务器希望 UI 在特定端口上运行,但实际上并非如此。

有关详细信息,请查看官方 Microsoft documentation


G
GeorgiG

我有类似的问题。在launchSettings 中,我的IIS Express 配置在一个端口上,并且有另一个启动配置文件在另一个带有另一个端口的ApplicationUrl 上启动。

使用 IIS Express 配置文件启动 Web 应用程序导致我遇到错误。


d
dabark

我正在使用 Apache ActiveMQ Artemis AMQP 消息代理。在重新启动后尝试与代理发送和接收消息时,我开始收到“无法建立连接,因为目标机器主动拒绝它”异常。在同一类型的代理仍然工作的计算机上,netstat -anb 显示代理正在侦听预期的端口 5672。在出现错误的计算机上,代理没有侦听。在出现错误的计算机上,启动代理导致 Microsoft 事件查看器的“Windows 日志 > 系统”中出现以下警告:

 The system failed to register host (A or AAAA) resource records for network adapter
 with settings:

            Adapter Name : {286EE2DA-3D81-41AE-VE5G-5D761FD3925E}
            Host Name : mypc
            Primary Domain Suffix : myco.com
            DNS server list :
                55.77.168.1, 74.86.130.1
            Sent update to server : 186.952.335.157:45
            IP Address(es) :
              182.269.1.437

 Either the DNS server does not support the DNS dynamic update protocol or the authoritative zone for the specified DNS domain name does not accept dynamic updates.

 To register the DNS host (A or AAAA) resource records using the specific DNS domain name and IP addresses for this adapter, contact your DNS server or network systems administrator.

在具有管理权限的 cmd.exe 中运行以下命令、重新启动并等待大约 15 分钟后,我能够毫无错误地使用代理:

       ipconfig /flushdns
       ipconfig /renew
       ipconfig /registerdns

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅