有时我得到以下错误,当我做HttpWebRequest到一个WebService。我也复制了下面的代码。


System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 127.0.0.1:80
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
   --- End of inner exception stack trace ---
   at 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();

当前回答

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

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

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

其他回答

如果总是发生这种情况,这实际上意味着机器存在,但它没有在指定端口上侦听服务,或者有防火墙阻止您。

如果这种情况偶尔发生(您使用了“有时”这个词),并且重试成功,则很可能是因为服务器有完整的“积压”。

当您等待侦听套接字接受时,您将处于积压中。这个积压是有限的,而且相当短——1、2或3的值并不罕见——因此操作系统可能无法将您的请求排队以接受消费。

backlog是listen函数上的一个参数——在这方面,所有语言和平台基本上都有相同的API,甚至c#也是如此。如果您控制服务器,则此参数通常是可配置的,并且可能从某些设置文件或注册表中读取。研究如何配置服务器。

如果您编写的是服务器,那么在套接字的accept中可能会有大量的处理,最好将其转移到单独的工作线程,以便您的accept始终准备好接收连接。您可以选择不同的体系结构来减少客户端排队和顺序处理。

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

当NAT路由器的映射端口耗尽时,很少会出现这种错误。不过,我认为我们可以放弃这种可能性,因为在耗尽之前,路由器有64K个同时连接到同一个目的地地址/端口。

在我的场景中,我有两个应用程序:

App1 App2

假设:App1应该监听App2在端口5000上的活动 错误:启动App1并试图监听一个不存在的鬼城,会产生错误 解决方案:首先启动App2,然后尝试使用App1监听

这是非常具体的,但是如果你在尝试使用mongo连接到数据库后收到这个错误,对我来说,在运行mongo.exe之前运行mongo.exe,然后连接工作正常。希望这能帮助到一些人。

当你调用服务只有HTTP(例如:http://example.com),你调用HTTPS(例如:https://example.com),你得到的恰恰是这个错误-“没有连接可以建立,因为目标机器主动拒绝它”

在Windows 7 Home Premium 64bit上使用WampServer 64bit时,我遇到了这个确切的问题。经过一小时又一小时的试验,很明显,我们所需要的只是在my.ini中注释掉一行。然后它工作得很好。

注释掉1行 套接字= mysql

如果你把旧的/data/文件放在合适的位置,WampServer将接受所有这些文件,除了它要重写的/mysql/文件夹。因此,然后我简单地从我以前的开发环境中导入/mysql/ user数据的备份,并在phpMyAdmin SQL窗口中运行FLUSH PRIVILEGES。伟大的工作。一定是出了什么问题,因为事情不应该这么容易。