有时我在对 WebService 执行 HttpWebRequest 时收到以下错误。我也在下面复制了我的代码。
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();
如果这种情况总是发生,它的字面意思是机器存在,但它没有服务在指定的端口上监听,或者有防火墙阻止你。
如果它偶尔发生——你使用了“有时”这个词——并且重试成功,很可能是因为服务器有一个完整的“积压”。
当您在侦听套接字上等待accept
时,您将被置于积压工作中。这个积压是有限的并且非常短——1、2 或 3 的值并不罕见——因此操作系统可能无法将您的请求排队等待“接受”消费。
backlog 是 listen
函数的一个参数 - 所有语言和平台在这方面都有基本相同的 API,即使是 C# one。如果您控制服务器,则此参数通常是可配置的,并且可能从某些设置文件或注册表中读取。调查如何配置您的服务器。
如果您编写了服务器,您的套接字的接受可能会进行繁重的处理,这可以更好地移动到单独的工作线程,以便您的接受始终准备好接收连接。您可以探索各种架构选择,以减轻客户端排队并按顺序处理它们。
无论您是否可以增加服务器积压,您都需要在客户端代码中使用重试逻辑来解决此问题 - 因为即使积压很长,服务器当时也可能在该端口上接收到许多其他请求。
如果 NAT 路由器的映射端口用尽,则极少有可能出现此错误。我认为我们可以放弃这种可能性,因为路由器在耗尽之前有 64K 同时连接到相同的目标地址/端口。
最可能的原因是防火墙。
This article 包含一组可能对您有用的原因。
从文章中,可能的原因可能是:
FTP 服务器设置
软件/个人防火墙设置
多个软件/个人防火墙
防毒软件
LSP 层
路由器固件
计算机已关闭
计算机未插入
提琴手
我有同样的。这是因为 Web 服务的端口号发生了意外更改。
当您拥有多个项目副本时,通常会发生此问题
我的项目使用我在主项目文件的 Web.Config 文件中分配的特定端口号调用 Web 服务。由于端口号意外更改,浏览器无法找到 Web 服务并引发该错误。
我按照以下步骤解决了这个问题:(Visual Studio 2010)
转到 Web 服务项目的属性 --> 单击 Web 选项卡 --> 在服务器部分 --> 检查特定端口,然后分配您的主项目调用 Web 服务的标准端口号。
我希望这能解决问题。
干杯:)
LocalHost:2532
。原来它是由您指定区域的前任所有者设置的。既然这个谜团已经清楚了,它就让其他一些事情变得不那么神秘了。谢谢!
我认为,您需要在“互联网选项”中检查您的代理设置。如果您正在使用代理/“隐藏 ip”应用程序,则可能会出现此问题。
我有同样的问题。问题是我没有启动硒服务器。我已经下载了 selenium 服务器并启动了它。启动 selenium 服务器后,问题消失了,一切正常。
请参考:http://coding-issues.blogspot.in/2012/11/no-connection-could-be-made-because.html
我的 WCF 服务使用 Net TCP 绑定遇到了同样的错误,但在我的情况下启动以下服务后解决了。
Net.Pipe.Listener.Adapter
Net.TCP.Listener.Adapter
Net.Tcp 端口共享服务
就我而言,有些域有效,而有些则没有。在我的 web.config 中添加对我组织的代理 URL 的引用解决了这个问题。
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy proxyaddress="http://proxy.my-org.com/" usesystemdefault="True"/>
</defaultProxy>
</system.net>
当您调用只有 HTTP(例如:http://example.com)的服务并调用 HTTPS(例如:https://example.com)时,您会得到这个错误 - “无法建立连接,因为目标机器主动拒绝它”
我遇到了同样的错误,因为当您的服务器和客户端在同一台机器上运行时,客户端需要服务器本地 IP 地址而不是公共 IP 地址来与服务器通信,您需要公共 IP 地址,仅当服务器和客户端在不同机器上运行时,请使用本地 IP 地址在客户端程序中连接服务器本地IP地址可以使用这种方法找到。
public static string Getlocalip()
{
try
{
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
return localIPs[7].ToString();
}
catch (Exception)
{
return "null";
}
}
我在使用 AppFabric 的应用程序中遇到此错误。线索是在堆栈跟踪中获得 DataCacheException
。要查看这是否是您的问题,请运行以下 PowerShell 命令:
@("AppFabricCachingService","RemoteRegistry") | % { get-service $_ }
如果这两个服务中的任何一个被停止,那么您将收到此错误。
对我来说,我想在 shell 中启动 mongo(与问题的确切上下文无关,但在 shell 中启动 mongo 之前有相同的错误消息)
进程“MongoDB 服务”未在服务中运行
以管理员身份启动 cmd 并键入,
net start MongoDB
只需输入 mongo 即可查看 MongoDB 已启动并运行,在 cmd 中它将提供 Mongo 版本详细信息和 Mongo Connection URL
好吧,我今天第一次在 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 声卡,这真的不应该导致这个问题,除了我之外没有其他人使用过这个系统。如果有人有线索,请您发表评论以防止我和其他遇到此问题的人发生这种情况。
用于解决方案中的服务参考。
重新启动您的工作站 重建您的解决方案 更新 WCFclient 项目中的服务引用
此时,我收到了允许系统访问的消息(Windows 7)。然后服务参考正确更新,没有错误。
我想分享我找到的这个答案,因为问题的原因不是防火墙或进程没有正确监听,而是我使用的 Microsoft 提供的代码示例。
https://msdn.microsoft.com/en-us/library/system.net.sockets.socket%28v=vs.110%29.aspx
我几乎完全按照所写的方式实现了这个功能,但发生的事情是我收到了这个错误:
2016-01-05 12:00:48,075 [10] 错误 - 错误是:System.Net.Sockets.SocketException (0x80004005):无法建立连接,因为目标机器主动拒绝它 [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 之前运行 mongod.exe,然后连接工作正常。希望这可以帮助某人。
还有一种可能——
确保您尝试打开与您正在收听的 IP 地址相同的 IP 地址。我的服务器应用程序正在使用 IPv6 侦听主机的 IP 地址,但客户端试图连接主机的 IPv4 地址。
我从我的 Web 层引用位于 WCFHost 上的服务收到此错误。对我有用的可能并不适用于所有人,但我将把这个答案留给可能的人。我的 WCFHost 的端口号由 IIS 随机更新,我只需将最终路由更新到我的 web 配置中的 svc 引用。问题解决了。
在我的场景中,我有两个应用程序:
应用程序1
应用程序2
假设:App1 应该在端口 5000 上监听 App2 的活动错误:启动 App1 并尝试监听一个不存在的鬼城,产生错误解决方案:先启动 App2,然后尝试使用 App1 监听
https://i.stack.imgur.com/XePnL.png
启用编辑并继续
在我的情况下,这是由于未在我的 web.config 中进行设置的错误部署引起的。
一位同事解释说,错误信息中的IP地址代表本地主机。
当我更正 web.config 时,我使用正确的 url 进行服务器调用并且它工作正常。
我想我会发布这个以防它可能对某人有帮助。
在 Windows 7 Home Premium 64bit 上使用 WampServer 64bit 我遇到了这个确切的问题。经过数小时的实验,很明显,只需要在 my.ini 中注释掉一行即可。然后它工作得很好。
注释掉 1 行 socket=mysql
如果您将旧的 /data/ 文件放在适当的位置,WampServer 将接受所有这些文件,但它覆盖的 /mysql/ 文件夹除外。因此,我只需从之前的开发环境中导入 /mysql/ 用户数据的备份,然后在 phpMyAdmin SQL 窗口中运行 FLUSH PRIVILEGES。效果很好。一定是有问题,因为事情不应该这么简单。
我经常遇到这个问题。我发现 SQL Server Agent
服务没有运行。一旦我手动启动服务,它就得到了修复。仔细检查服务是否正在运行:
运行提示符,输入 services.msc 并回车 查找服务名称 - SQL Server Agent(Instance Name)
如果 SQL Server Agent
未运行,请双击该服务以打开属性窗口。然后点击 Start
按钮。希望它会帮助某人。
我遇到了这个错误并花了一些时间来解决它。就我而言,我将 https 和 net.tcp 配置为同一端口上的 IIS 绑定。显然你不能在同一个端口上有两个东西。我使用 netstat -ap tcp 命令检查该端口上是否有东西在监听。没有人在听。删除不必要的绑定(在我的例子中是 https)解决了我的问题。
这对我来说是一个愚蠢的问题,我在我的 web.config 中添加了一个 defaultproxy 以拦截 Fiddler 中的流量,然后忘记删除它!
有一个名为“SQL Server Browser”的服务向客户端提供 SQL Server 连接信息。
就我而言,现有的解决方案都没有工作,因为该服务没有运行。我恢复了它,一切都恢复正常。
我今天面临这个问题。我的是 Asp.Net Core API,它使用 Postgresql
作为数据库。我们已将此数据库配置为 Docker 容器。所以我做的第一步是检查我是否能够访问数据库。为此,我在开始时搜索了 PgAdmin
,因为我已经配置了它。单击生成的应用程序会将您重定向到 http://127.0.0.1:23722/browser/。在那里,您可以尝试在左侧菜单中访问您的数据库。对我来说,我收到了一个错误,如下图所示。
https://i.stack.imgur.com/NqEKL.png
输入密码并尝试您是否能够访问它。对我来说,它不起作用。因为它是一个 Docker 容器,所以我决定重新启动我的 Docker 桌面,右键单击任务栏中的 docker 图标,然后单击重新启动。
重新启动 Docker 后,我能够登录并查看数据库,当我在 Visual Studio 中重新启动应用程序时,错误也消失了。
希望能帮助到你。
可能是因为授权问题;我就是这样。例如,如果您的控制器函数顶部有:[Authorize("WriteAccess")]
或 [Authorize("ReadAccess")]
,请尝试将它们注释掉。
我现在才遇到这个...
https://i.stack.imgur.com/29R9o.png
在我这边,我有 2 个独立的 Visual Studio 解决方案 (.sln)...在他们自己的 Visual Studio 实例中打开每一个。
解决方案 2 调用解决方案 1 代码。问题与分配给解决方案 1 的端口有关。我不得不将解决方案 1 上的端口更改为另一个端口,然后解决方案 2 再次开始工作。因此,请确保检查分配给您的项目的端口。
通常,连接脚本不会提及要使用的端口。例如:
$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 数据库管理器上的连接,请使用脚本:wamp(64)\www\testmysql.php,将“http://localhost/testmysql.php”放在浏览器地址栏中,首先根据修改脚本到你的参数。
我忘了启动服务,所以它失败了,因为没有服务正在监听端口。通过启动服务解决。
不定期副业成功案例分享