有时我得到以下错误,当我做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();

最可能的原因是防火墙。

这篇文章包含了一组可能对您有用的原因。

从文章来看,可能的原因有:

FTP服务器设置 软件/个人防火墙设置 多种软件/个人防火墙 杀毒软件 LSP层 路由器固件 关闭电脑 电脑未插电 提琴手


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

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

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

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

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

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

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


我也有。这是因为web服务的端口号意外地发生了变化。

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

我的项目正在使用我在Web中分配的特定端口号调用Web服务。配置文件我的主要项目文件。由于端口号意外更改,浏览器无法找到Web服务并抛出该错误。

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

进入Web服务项目的属性—>单击Web选项卡—>在服务器部分—>检查特定端口 然后分配主项目调用web服务时使用的标准端口号。

我希望这能解决问题。

欢呼:)


我从我的web层引用位于WCFHost上的服务时收到了这个错误。对我有效的方法可能并不适用于所有人,但我把这个答案留给那些可能适用的人。我的WCFHost的端口号是由IIS随机更新的,我只需要在我的web配置中更新到svc引用的结束路由。问题解决了。


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

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

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


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

注释掉1行 套接字= mysql

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


我也有同样的问题。问题是我没有启动硒服务器。我已经下载了硒服务器,并启动了它。启动硒服务器后,问题消失了,一切正常工作。

参考这个:http://coding-issues.blogspot.in/2012/11/no-connection-could-be-made-because.html


好吧,我今天在64位的Windows 8上突然收到了这个错误,这是第一次,原来我的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

网Tcp端口共享服务


我认为,你需要检查你的代理设置在“互联网选项”。如果您正在使用代理/'隐藏ip'应用程序,则可能会出现此问题。


用于解决方案中的服务引用。

重新启动工作站 重新构建解决方案 更新WCFclient项目中的服务引用

此时,我收到消息(Windows 7)允许系统访问。 然后正确地更新了服务引用,没有出现错误。


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

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

我几乎完全按照所写的那样实现了这个函数,但发生的事情是我得到了这个错误:

2016-01-05 12:00:48075 [10] ERROR -错误是:System.Net.Sockets.SocketException (0x80004005): No connection could be made because The target machine actively refused it [fe80::caa:745:a1da:e6f1%11]:4080

这段代码将表示套接字已连接,但不是在正确通信实际所需的正确IP地址下。(微软提供)

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;
    }

我重写了代码,只使用它找到的第一个有效IP。我只关心使用IPV4,但它与localhost, 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;
        }
    }

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


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

App1 App2

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


我经常遇到这种问题。我发现SQL Server代理服务没有运行。当我手动启动这项服务时,问题就解决了。再次检查服务是否在运行:

运行提示符,输入services。MSC,然后回车 查找服务名称- SQL Server代理(实例名)

如果SQL Server Agent未运行,双击该服务打开属性窗口。然后点击开始按钮。希望它能帮助到一些人。


在我的例子中,有些域名可以使用,而有些则不行。在我的网页中添加对我的组织的代理Url的引用。配置修复了这个问题。

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

我遇到了同样的错误,因为当你的服务器和客户端运行在同一台机器上,客户端需要服务器本地ip地址而不是公共ip地址来与服务器通信,你只需要公共ip地址,当服务器和客户端运行在不同的机器上,所以在客户端程序中使用本地ip地址来连接服务器,使用这种方法可以找到本地ip地址。

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

            return "null";
        }

    }

还有一种可能——

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


转到你的WCF项目- 属性- > -> 调试器 ->取消复选框的标记

启用“编辑并继续”


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


这对我来说是一个愚蠢的问题,我已经添加了一个defaultproxy到我的网络。配置,以拦截流量在提琴手,然后忘记删除它!


有一种服务叫做“SQL Server浏览器”,它向客户端提供SQL Server连接信息。

在我的例子中,现有的解决方案都不起作用,因为这个服务没有运行。我恢复了它,一切都恢复得很完美。


在我的情况下,这是由一个错误的部署,在我的网络设置。没有配置。

一位同事解释说,错误消息中的IP地址代表本地主机。

当我修正网页的时候。我当时使用正确的url进行服务器调用,它工作。

我想我应该把这个贴出来,也许能帮助到一些人。


I was facing this issue today. Mine was Asp.Net Core API and it uses Postgresql as the database. We have configured this database as a Docker container. So the first step I did was to check whether I am able to access the database or not. To do that I searched for PgAdmin in the start as I have configured the same. Clicking on the resulted application will redirect you to the http://127.0.0.1:23722/browser/. There you can try access your database on the left menu. For me I was getting an error as in the below image.

输入密码,并尝试是否能够访问它。对我来说,这行不通。因为它是一个Docker容器,我决定重新启动我的Docker桌面,右键单击任务栏中的Docker图标,然后单击重新启动。

在重新启动Docker后,我能够登录并看到数据库,并且当我在Visual Studio中重新启动应用程序时,错误也消失了。

希望能有所帮助。


这可能是因为授权问题;我就是这样。 例如,如果在控制器函数的顶部有[Authorize("WriteAccess")]或[Authorize("ReadAccess")],请尝试将它们注释掉。


对我来说,我想在shell中启动mongo(与问题的确切上下文无关,但在shell中启动mongo之前有相同的错误消息)

进程“MongoDB Service”没有在服务中运行

以管理员身份启动cmd并输入,

net start MongoDB

为了查看MongoDB是否启动并运行,只需输入mongo,在cmd中,它会给出mongo版本详细信息和mongo连接URL


我现在就面对这个问题……

在我这边,我有2个独立的Visual Studio解决方案(.sln)…在各自的Visual Studio实例中打开每个实例。

解决方案2调用解决方案1代码。问题与分配给解决方案1的端口有关。我不得不将解决方案1上的端口更改为另一个端口,然后解决方案2又开始工作了。因此,请确保检查分配给项目的端口。


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


通常,连接脚本不会提到要使用的端口。例如:

$mysqli = mysqli_connect('127.0.0.0.1', 'user', 'password', 'database');

所以,要连接到一个不使用端口3306的管理器,你必须在连接请求上指定端口号:

$mysqli = mysqli_connect('127.0.0.0.1', 'user', 'password', 'database', '3307');

要检查MySQL或MariaDB数据库管理器上的连接,使用脚本: 里面(64)\ www \ testmysql.php 在浏览器地址栏中输入“http://localhost/testmysql.php”,然后根据参数修改脚本。


我忘记启动服务,所以它失败了,因为没有服务正在监听端口。 通过启动服务来解决。


我还建议检查http_proxy环境变量。

https://www.golinuxcloud.com/set-up-proxy-http-proxy-environment-variable/: ~:文本= % 20 http_proxy % 20和% 20 https_proxy % 20的环境,等% 20 % 20卷% 20和% 20 wget % 20。


这里还有一件事要检查,我犯这个错误的次数比我愿意承认的多:你是试图连接https还是http?我以为我有一些模糊的证书问题,但结果是我忘记了我的URL定义中的s。总是先检查基础!