无法建立连接,因为目标机器主动拒绝它 127.0.0.1:3446
Posted
技术标签:
【中文标题】无法建立连接,因为目标机器主动拒绝它 127.0.0.1:3446【英文标题】:No connection could be made because the target machine actively refused it 127.0.0.1:3446 【发布时间】:2012-03-30 12:20:50 【问题描述】:我正在使用 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;
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);
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& 套接字, IPAddress& 地址, ConnectSocketState 状态, IAsyncResult asyncResult, Int32 超时, Exception& 异常)
【问题讨论】:
您不必担心本地连接的防火墙或互联网连接。在您的代码中,您连接到端口8000
,但在您的错误消息中,端口是3446
。这相关吗?
@Graphain 这是一个拼写错误。谢谢你提到它。请查看我的编辑。
【参考方案1】:
“主动拒绝”表示当您尝试连接时主机发送了重置而不是确认。因此,这在您的代码中不是问题。有防火墙阻止了连接,或者托管服务的进程没有在该端口上侦听。这可能是因为它根本没有运行,或者因为它正在侦听不同的端口。
启动托管服务的进程后,尝试netstat -anb
(需要管理员权限)以验证它是否正在运行并在预期的端口上侦听。
更新:在 Linux 上,您可能需要改用 netstat -anp
。
【讨论】:
感谢netstat -anb
,我在列表中找不到端口。您知道解决此问题的一些可能步骤吗?我已经关闭了防火墙,禁用了杀毒软件并禁用了互联网连接,但仍然存在错误。
您如何托管服务?如果您只是从 Visual Studio 中按下 f5,则它是托管在 iisexpress.exe 中的 IIRC。您可以查看托管进程的相同列表,以确定它正在侦听的端口。
"您如何托管服务?"这真的让我思考了一会儿。我尝试运行将服务托管到 3445 的其余项目,并运行 windows 窗体项目并将主机也定位到 3445。然后一切顺利。谢谢!谢谢大家。你帮了我很多。
我已经按照你的说法在我的登台服务器上完成了所有设置(防火墙、端口、启用 WcF 服务),但我仍然遇到同样的错误,你能指导我吗??
@suBDavis -an b
是特定于 Linux 的。原始版本在 Windows 上运行良好(而您的更新版本则不能),这是大多数人用来开发 WCF 服务的平台。也就是说,我已经用 Linux 等价物更新了答案,因为这现在是谷歌上与原始问题无关的事情的热门话题。【参考方案2】:
您不必重新启动 PC。而是重新启动 IIS。
运行 -> 'cmd'(以管理员身份)并输入“iisreset”
【讨论】:
我在执行netstat -anb
时看到了端口,并且我还重新启动了服务器。还是同样的错误,有什么帮助吗?
啊太棒了!重新启动iis
为我解决了这个问题。没有其他解决方案有效这个被低估了!【参考方案3】:
在我当前的项目中,我收到了类似的错误消息,例如 TCP 错误代码 10061:无法建立连接,因为目标机器主动拒绝了它。我发现这个 10061 错误代码无法区分服务端点未启动和被防火墙阻止的情况。通常,可以关闭防火墙,但问题仍然存在。
您可以通过以下两种方式测试您的代码。
-
插入代码以获取服务启动的时间 A 和客户端向服务器发送请求的时间 B。如果 B 早于 A,可能会导致此问题。
将您的服务器端口更改为系统中也可用的另一个端口。您会发现报告的错误代码相同。
以上是我的修复。它适用于我的机器。希望对你有帮助!
【讨论】:
你能看看这里吗? ***.com/questions/52386437/…【参考方案4】:您必须设置系统代理 你必须经过这条路 控制面板>>网络选项>>连接>>局域网设置>> 代理 没有tik:使用代理服务器
【讨论】:
【参考方案5】:检查是否有其他程序正在使用该端口。
如果同一程序的一个实例仍处于活动状态,则终止该进程。
【讨论】:
我已经做到了,实际上我有一个示例控制台项目来测试端口是否可用。 当我遇到这个问题时,实际上我不得不重新启动我的电脑来释放端口。 您是否尝试过仅更改端口号?我在托管 CruiseControl 时遇到了类似的问题,更改了配置中的端口号,但我无法通过 netstat 扫描找到。 您应该发布您的 web.config。我猜端点配置有问题。【参考方案6】:我遇到了类似的问题。就我而言,该服务在开发人员机器上可以正常工作,但在 QA 机器上会失败。事实证明,在 QA 机器上,应用程序没有以管理员身份运行,也没有注册端点的权限:
HTTP 无法注册 URL http://+:12345/Foo.svc/]。你的过程确实 没有对此命名空间的访问权限(请参阅 http://go.microsoft.com/fwlink/?LinkId=70353了解详情)。
请参阅此处了解如何在不成为管理员用户的情况下使其工作:https://***.com/a/885765/38258
【讨论】:
【参考方案7】:如果你使用 WCF Storm,你甚至可以登录到 WCF 服务端点吗?如果没有,并且您将它托管在 Windows 服务中,您可能忘记注册该名称空间。没有很好地宣传这一步是必须的,而且确实很烦人。
我用this tool to do this;它将所有这些繁琐的步骤自动化。
【讨论】:
【参考方案8】:检查您网页的Web.config文件中的端口号是否与IIS托管的端口号相同。
【讨论】:
【参考方案9】:我在我的网络服务器上遇到了同样的问题“无法建立连接,因为目标机器主动拒绝了它 161.x.x.235:5672”。我让管理员打开web服务器上的5672端口,然后就正常了。
【讨论】:
在您的服务器中,打开高级安全 Windows 防火墙。添加新的入站/出站 TCP 规则,输入 5672 端口。您最好请网络管理员为您做。 有没有办法知道哪个端口对 SMTP 开放?【参考方案10】:我遇到了类似的问题
拒绝 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());
【讨论】:
【参考方案11】:我无法重新启动 IIexpress。这是对我有用的解决方案
-
清理了构建
重建
【讨论】:
【参考方案12】:由于@Yaur,我能够跟踪此错误,您需要检查服务 (WCF) 是否正在运行,并检查您的高级防火墙设置中的出站和入站 TCP 属性。
【讨论】:
【参考方案13】:使用类似的模式,我的休息客户端正在调用服务 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& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception&异常)
解决方法:在 Web config 中设置代理。
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy proxyaddress="http://proxy_ip:portno/" usesystemdefault="True"/>
</defaultProxy>
</system.net>
【讨论】:
【参考方案14】:我在 C# 中的 .Net Remoting Service 中也遇到了问题。
我分三步解决了:
-
在所有正在使用的文件中更改协议端口。
运行您的主机服务器程序并使其处于活动状态。
现在运行您的客户端程序。
【讨论】:
【参考方案15】:我遇到了类似的问题。在我的情况下,*** 代理应用程序(例如 Psiphon ،)更改了 Windows 中的代理设置,因此请按照以下步骤操作:
在 Windows 10 中,在手动代理中搜索更改代理设置和启用代理服务器
【讨论】:
【参考方案16】:确保您的应用程序使用的所有服务都已打开,这些服务正在使用主机和端口来使用它们。例如,在我的情况下,如果您的应用程序正在使用 Redis 服务器并且无法在给定端口和主机上连接到它,则可能会出现此错误,从而产生此错误。
【讨论】:
【参考方案17】:就我而言,我有一个带有 ASP.NET Core 的 Angular SLA 项目模板。
我试图从 Visual Studio WebUI 解决方案运行 IIS Express,触发“主动拒绝它”错误。
在这种情况下,问题与阻塞连接的防火墙无关。
事实证明,我必须独立于 Kestrel 运行运行 Angular 服务器,因为服务器希望 UI 在特定端口上运行,但实际上并没有实际上。
更多信息,请查看微软官方documentation。
【讨论】:
【参考方案18】:我有类似的问题。在 launchSettings 中,我的 IIS Express 配置在一个端口上,并且另一个启动配置文件在另一个具有另一个端口的 ApplicationUrl 上启动。
使用 IIS Express 配置文件启动 Web 应用程序导致我遇到错误。
【讨论】:
【参考方案19】:我正在使用 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
【讨论】:
以上是关于无法建立连接,因为目标机器主动拒绝它 127.0.0.1:3446的主要内容,如果未能解决你的问题,请参考以下文章
TCP错误代码10061:无法建立连接,因为目标机器主动拒绝它 127.0.0.1:8732
无法建立连接,因为目标计算机主动拒绝它127.0.0.1:3446
无法建立连接,因为目标计算机主动拒绝它127.0.0.1:63591
连接被对方拒绝:10061:无法建立连接,因为目标机器主动拒绝它