由于目标机器主动拒绝,所以不能build立连接?

有时我在做WebService的HttpWebRequest的时候遇到下面的错误。 我也复制了下面的代码。


 System.Net.WebException:无法连接到远程服务器---> System.Net.Sockets.SocketException:无法build立连接,因为目标机器主动拒绝它127.0.0.1:80
   在System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress)
   在System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
   在System.Net.ServicePoint.ConnectSocketInternal(布尔connectFailure,套接字s4,套接字s6,套接字和套接字,IP地址和地址,ConnectSocketState状态,IAsyncResult asyncResult,Int32超时,exception和例外)
    ---内部exception堆栈跟踪结束---
   在System.Net.HttpWebRequest.GetRequestStream()

ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.PreAuthenticate = true; request.Credentials = networkCredential(sla); request.Method = WebRequestMethods.Http.Post; request.ContentType = "application/x-www-form-urlencoded"; request.Timeout = v_Timeout * 1000; if (url.IndexOf("asmx") > 0 && parStartIndex > 0) { AppHelper.Logger.Append("#############" + sla.ServiceName); using (StreamWriter reqWriter = new StreamWriter(request.GetRequestStream())) { while (true) { int index01 = parList.Length; int index02 = parList.IndexOf("="); if (parList.IndexOf("&") > 0) index01 = parList.IndexOf("&"); string parName = parList.Substring(0, index02); string parValue = parList.Substring(index02 + 1, index01 - index02 - 1); reqWriter.Write("{0}={1}", HttpUtility.UrlEncode(parName), HttpUtility.UrlEncode(parValue)); if (index01 == parList.Length) break; reqWriter.Write("&"); parList = parList.Substring(index01 + 1); } } } else { request.ContentLength = 0; } response = (HttpWebResponse)request.GetResponse(); 

如果这种情况总是发生的话,那就意味着机器已经存在,但是它没有监听指定端口的服务,或者防火墙阻止了你。

如果偶尔发生 – 你使用了“有时候”这个词 – 并且重试成功,这可能是因为服务器有一个完整的“积压”。

当你正在等待accept一个监听套接字,你被置于积压。 这个积压是有限的,而且非常短 – 值1,2或3并不罕见 – 所以操作系统可能无法排队请求“接受”消耗。

积压是listen函数的一个参数 – 所有的语言和平台在这方面基本上都是相同的API,即使是C#也是如此 。 如果您控制服务器,此参数通常是可configuration的,并且可能从某些设置文件或registry中读取。 调查如何configuration您的服务器。

如果你编写了服务器,那么在接受你的套接字的时候可能会有很多的处理,而且最好把它移到一个单独的工作线程中,这样你的接受就可以随时接收连接了。 您可以探索各种架构select,缓解排队客户端并按顺序处理它们。

无论您是否可以增加服务器积压,您都需要在您的客户端代码中重试逻辑来处理这个问题,因为即使长时间的积压,服务器当时也可能在该端口上接收到大量其他请求。

如果NAT路由器将映射的端口用完,那么出现此错误的可能性很小。 我认为我们可以放弃这种可能性,因为路由器在耗尽前有64K的同时连接到相同的目的地址/端口。

最可能的原因是防火墙。

本文包含一系列原因。 这可能对你有用。

从文章中,可能的原因可能是:

  • FTP服务器设置
  • 软件/个人防火墙设置
  • 多个软件/个人防火墙
  • 防毒软件
  • LSP层
  • 路由器固件
  • 计算机已closures
  • 计算机没有插入

这也发生在我身上..有时当我打开我的项目时,这个错误显示出来,这是令人沮丧的。 问题是,有时Web服务的端口号意外改变。

当您有多个项目副本时,通常会发生此问题

我的项目使用我在主项目文件的Web.Config文件中分配的特定端口号来调用Web服务。 由于端口号意外地改变,浏览器无法findWeb服务并抛出该错误。

我通过以下步骤解决了这个问题:(Visual Studio 2010)

转到Web service项目的属性 – >单击Web选项卡 – >在服务器部分 – >检查特定端口 ,然后分配主项目调用Web服务的standard port number

我希望这将解决这个问题。

干杯:)

我想,你需要在“internet选项”中检查你的代理设置。 如果您使用代理/“隐藏ip”应用程序,则可能会出现此问题。

我有同样的问题。 问题是我没有启动selenium服务器。 我已经下载了selenium服务器,我开始了。 启动selenium服务器后,发出去,一切正常。

请参阅: http : //coding-issues.blogspot.in/2012/11/no-connection-could-be-made-because.html

这真的很具体,但是如果在尝试使用mongo连接到数据库之后收到此错误,那么在运行mongo.exe之前运行mongod.exe,然后连接工作正常。 希望这有助于某人。

我在使用AppFabric的应用程序中遇到了这个错误。 线索是在堆栈跟踪中得到一个DataCacheException [1]。 要查看这是否是您的问题,请运行以下PowerShell命令:

@(“AppFabricCachingService”,“RemoteRegistry”)| %{get-service $ _}

如果这两个服务中的任何一个都停止了,那么你会得到这个错误。

[1] http://msdn.microsoft.com/en-us/library/microsoft.applicationserver.caching.datacacheexception.aspx

那么,今天我第一次在Windows 8 64位上收到了这个错误,事实上我的my.ini已经被重置,bin / mysqld文件已经被删除,其他项目在"Program Files/MySQL/MySQL Server 5.6"文件夹中。

为了解决这个问题,我不得不再次运行MySQL安装程序,只安装服务器,并从"ProgramData/MySQL/MySQL Server 5.6"复制最近版本的my.ini文件,名为my_2014-03-28T15-51-20.ini在我的情况下(不知道如何或为什么最近复制到那里)回到"Program Files/MySQL/MySQL Server 5.6"

自从MySQL工作以来,对系统的唯一改变就是安装了Native Instruments的Traktor 2和一个Traktor Audio 2声卡,这实际上不应该引起这个问题,除了我以外没有人使用过这个系统。 如果任何人有线索,那么你会发表评论,以防止我和任何其他遇到这种情况的人。

我用我的WCF服务使用Net TCP绑定同样的错误,但在我的情况下开始下面的服务后解决。

Net.Pipe.Listener.Adapter

Net.TCP.Listener.Adapter

Net.Tcp端口共享服务

我想分享这个答案,我发现,因为问题的原因不是防火墙或进程不正确听,这是从微软提供的代码示例,我使用。

https://msdn.microsoft.com/en-us/library/system.net.sockets.socket%28v=vs.110%29.aspx

我几乎完全按照书面实现了这个function,但发生了什么事是我得到这个错误:

2016-01-05 12:00:48,075 [10]错误 – 错误是:System.Net.Sockets.SocketException(0x80004005):无法连接,因为目标机器主动拒绝它[fe80 :: caa:745: a1da:e6f1%11]:4080

这段代码会说套接字已经连接,但是没有正确的IP地址正确通信所需要的。 (由Microsoft提供)

 private static Socket ConnectSocket(string server, int port) { Socket s = null; IPHostEntry hostEntry = null; // Get host related information. hostEntry = Dns.GetHostEntry(server); // Loop through the AddressList to obtain the supported AddressFamily. This is to avoid // an exception that occurs when the host IP Address is not compatible with the address family // (typical in the IPv6 case). foreach(IPAddress address in hostEntry.AddressList) { IPEndPoint ipe = new IPEndPoint(address, port); Socket tempSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp); tempSocket.Connect(ipe); if(tempSocket.Connected) { s = tempSocket; break; } else { continue; } } return s; } 

我重新编写了代码来使用它find的第一个有效IP。 我只关心使用这个IPV4,但它与本地主机,127.0.0.1,以及您的网卡的实际IP地址,微软提供的例子失败!

  private Socket ConnectSocket(string server, int port) { Socket s = null; try { // Get host related information. IPAddress[] ips; ips = Dns.GetHostAddresses(server); Socket tempSocket = null; IPEndPoint ipe = null; ipe = new IPEndPoint((IPAddress)ips.GetValue(0), port); tempSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp); Platform.Log(LogLevel.Info, "Attempting socket connection to " + ips.GetValue(0).ToString() + " on port " + port.ToString()); tempSocket.Connect(ipe); if (tempSocket.Connected) { s = tempSocket; s.SendTimeout = Coordinate.HL7SendTimeout; s.ReceiveTimeout = Coordinate.HL7ReceiveTimeout; } else { return null; } return s; } catch (Exception e) { Platform.Log(LogLevel.Error, "Error creating socket connection to " + server + " on port " + port.ToString()); Platform.Log(LogLevel.Error, "The error is: " + e.ToString()); if (g_NoOutputForThreading == false) rtbResponse.AppendText("Error creating socket connection to " + server + " on port " + port.ToString()); return null; } } 

在我的情况下,一些域名有效,有些则没有。 在我的web.config中添加对我的组织的代理Url的引用修复了这个问题。

 <system.net> <defaultProxy useDefaultCredentials="true"> <proxy proxyaddress="http://proxy.my-org.com/" usesystemdefault="True"/> </defaultProxy> </system.net> 

转到您的WCF项目 – 属性 – > 卷筒纸 – >debugging器 – >取消勾选checkbox

启用编辑并继续

用于解决scheme中的服务参考。

  1. 重新启动您的工作站

  2. 重build您的解决scheme

  3. 更新WCFclient项目中的服务引用

在这一点上,我收到消息(Windows 7),以允许系统访问。 然后服务参考被正确更新,没有错误。

我面临同样的错误,因为当你的服务器和客户端运行在同一台机器上客户端需要服务器本地IP地址不公开IP地址与您需要的服务器通信公共IP地址只有当服务器和客户端运行在单独的机器上,所以使用本地IP地址在客户端程序中用服务器连接本地ip地址可以用这个方法find。

  public static string Getlocalip() { try { IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName()); return localIPs[7].ToString(); } catch (Exception) { return "null"; } } 

我从我的Web层引用位于WCFHost上的服务时收到这个错误。 对我有用的东西可能不适用于每个人,但是我将这个答案留给可能的人。 我的WCFHost的端口号是由IIS随机更新的,我只需更新结束路由到我的webconfiguration中的svc引用。 问题解决了。

在Windows 7家庭高级版64位使用WampServer 64位我遇到了这个确切的问题。 经过数小时和数小时的实验,很明显,所有需要的是在my.ini中注释掉一行。 然后它工作正常。

注释掉了1行socket = mysql

如果你把旧/数据/文件放在适当的位置,WampServer将接受除了写入的/ mysql /文件夹以外的所有文件。 于是我简单地从我以前的开发环境中导入了/ mysql / user数据的备份,并在phpMyAdmin SQL窗口中运行FLUSH PRIVILEGES。 很好用。 有些事情一定是错的,因为事情不应该这么容易。

在我的情况下,我有两个应用程序:

  • APP1
  • 应用2

假设 :App1应该监听App2在端口5000上的活动

错误 :启动App1并试图聆听不存在的鬼城,会产生错误

解决scheme :先启动App2,然后尝试使用App1进行监听

我经常遇到这个问题。 我发现SQL Server Agent服务没有运行。 一旦我开始手动服务,它已经修复。 仔细检查服务是否正在运行:

  1. 运行提示符,inputservices.msc并回车
  2. 查找服务名称 – SQL Server Agent实例名称

如果SQL Server Agent未运行,请双击该服务以打开属性窗口。 然后点击Startbutton。 希望它能帮助别人。

还有一种可能性 –

确保您正在尝试打开与您正在收听的地址相同的IP地址。 我的服务器应用程序正在使用IPv6监听主机的IP地址,但是客户机正试图连接主机的IPv4地址。

我遇到了这个错误,花了一些时间来解决它。 在我的情况下,我把https和net.tcpconfiguration为同一端口上的IIS绑定。 显然你不能在同一个端口上有两件事情。 我使用netstat -ap tcp命令来检查是否有在该端口上侦听的东西。 没有人听。 删除不必要的绑定(https在我的情况)解决了我的问题。

这是一个愚蠢的问题在我身边,我已经添加了一个defaultproxy到我的web.config为了拦截在提琴手的交通,然后忘了把它删除!