Никакое соединение не может быть сделано, потому что целевая машина активно отказалась?
Иногда я получаю следующую ошибку, когда я делал 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();
Ответы
Ответ 1
Если это происходит всегда, это буквально означает, что машина существует, но у нее нет служб, прослушивающих указанный порт, или брандмауэр останавливает вас.
Если это случается время от времени - вы использовали слово "иногда" - и повторная попытка завершается успешно, скорее всего, потому, что сервер имеет полное "отставание".
Когда вы ожидаете, что вас accept
на прослушивающем сокете, вы попадаете в очередь. Это отставание является конечным и довольно коротким - значения 1, 2 или 3 не являются чем-то необычным - и поэтому ОС может быть не в состоянии поставить ваш запрос в очередь на прием для принятия.
Отставание является параметром функции listen
- все языки и платформы в этом отношении имеют в основном один и тот же API, даже С#. Этот параметр часто настраивается, если вы управляете сервером, и, скорее всего, читается из какого-либо файла настроек или реестра. Изучите, как настроить ваш сервер.
Если вы написали сервер, у вас может быть тяжелая обработка при принятии вашего сокета, и это может быть лучше перенесено в отдельный рабочий поток, так что ваше принятие всегда готово для получения соединений. Вы можете изучить различные варианты архитектуры, которые уменьшают очереди клиентов и обрабатывают их последовательно.
Независимо от того, можете ли вы увеличить объем невыполненных заданий на сервере, вам потребуется логика повторения в клиентском коде, чтобы справиться с этой проблемой - поскольку даже при длительном отставании сервер может получать множество других запросов на этот порт в это время.
Существует редкая возможность, когда маршрутизатор NAT выдаст эту ошибку, если его порты для сопоставлений будут исчерпаны. Я думаю, что мы можем отбросить эту возможность как слишком большую перспективу, поскольку маршрутизатор имеет 64K одновременных подключений к одному и тому же адресу/порту назначения до исчерпания.
Ответ 2
Наиболее вероятной причиной является брандмауэр.
Эта статья содержит ряд причин. Это может быть полезно для вас.
Из статьи возможны возможные причины:
- Настройки FTP-сервера
- Настройки программного обеспечения/персонального брандмауэра
- Несколько программных/личных брандмауэров
- Антивирусное программное обеспечение
- LSP Layer
- Прошивка маршрутизатора
- Компьютер выключен
- Компьютер не подключен
Ответ 3
Это случилось и со мной. Иногда, когда я открываю свой проект, эта ошибка показалась неудачной. Проблема заключалась в том, что иногда номер порта веб-службы неожиданно менялся.
Эта проблема обычно возникает, когда у вас более одного экземпляра проекта
Мой проект вызывал веб-службу с определенным номером порта, который я назначил в файле Web.Config моего основного файла проекта. Поскольку номер порта неожиданно изменился, браузеру не удалось найти веб-службу и выбросить эту ошибку.
Я решил это, выполнив следующие шаги: (Visual Studio 2010)
Перейдите в "Свойства проекта Web service
→ щелкните вкладку Веб → В разделе Серверы → Проверить Конкретный порта затем назначьте standard port number
, с помощью которого ваш основной проект вызывает веб-службу.
Я надеюсь, что это решит проблему.
Приветствия:)
Ответ 4
Я думаю, вам нужно проверить настройки прокси-сервера в "интернет-вариантах". Если вы используете приложения proxy/'hide ip', эта проблема может возникнуть.
Ответ 5
У меня была та же проблема. Проблема в том, что я не запускал сервер селена. Я загрузил сервер selenium, и я начал его. После запуска сервера selenium проблема исчезнет, и все работает нормально.
Обратите внимание: http://coding-issues.blogspot.in/2012/11/no-connection-could-be-made-because.html
Ответ 6
Это действительно специфично, но если вы получили эту ошибку после попытки подключения к базе данных с помощью mongo, то для меня работала mounod.exe перед запуском mongo.exe, а затем соединение работало нормально. Надеюсь, это поможет кому-то.
Ответ 7
Я столкнулся с такой же ошибкой, потому что, когда ваш сервер и клиент работают на одном компьютере, серверу нужен локальный IP-адрес сервера, а не публичный IP-адрес для связи с сервером, вам нужен открытый IP-адрес только в том случае, если сервер и клиент работают на отдельной машине, поэтому используйте Локальный IP-адрес в клиентской программе для подключения к серверу. Локальный IP-адрес можно найти с помощью этого метода.
public static string Getlocalip()
{
try
{
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
return localIPs[7].ToString();
}
catch (Exception)
{
return "null";
}
}
Ответ 8
Я получил эту ошибку в приложении, которое использует AppFabric. Подсказка получала DataCacheException
в трассировке стека. Чтобы узнать, является ли это проблемой для вас, выполните следующую команду PowerShell:
@("AppFabricCachingService","RemoteRegistry") | % { get-service $_ }
Если одна из этих двух служб остановлена, вы получите эту ошибку.
Ответ 9
Ну, я впервые получил эту ошибку на 64-битной Windows 8 в первый раз, и оказалось, что my.ini был reset, а файл bin/mysqld был удалены, среди других элементов в папке "Program Files/MySQL/MySQL Server 5.6"
.
Чтобы исправить это, мне пришлось снова запустить установщик MySQL, установив только сервер и скопировав последнюю версию файла my.ini из "ProgramData/MySQL/MySQL Server 5.6"
с именем my_2014-03-28T15-51-20.ini
в моем случае (не знаю, как или почему это скопировано там так недавно) обратно в "Program Files/MySQL/MySQL Server 5.6"
.
Единственное изменение в системе, с которой работал MySQL, это установка Native Instruments Traktor 2 и звуковой платы Traktor Audio 2, которая действительно не должна была вызывать эту проблему, и никто другой не использовал эту систему помимо меня. Если у кого-то есть ключ, вам будет некогда прокомментировать, чтобы предотвратить это для меня и для всех, кто столкнулся с этим.
Ответ 10
У меня была такая же ошибка с моей службой WCF с использованием привязки Net TCP, но она разрешилась после запуска нижеуказанных служб в моем случае.
Net.Pipe.Listener.Adapter
Net.TCP.Listener.Adapter
Служба обмена портами Net.Tcp
Ответ 11
Для справки об обслуживании в рамках решения.
В этот момент я получил messsage (Windows 7), чтобы разрешить доступ к системе.
Затем ссылка на службу была правильно обновлена без ошибок.
Ответ 12
Я хотел бы поделиться этим ответом, который нашел, потому что причиной проблемы был не брандмауэр или процесс, который не прослушивался правильно, это был пример кода, предоставленный 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-адресом, фактически необходимым для правильной связи. (Предоставлено 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;
}
Я переписал код, чтобы использовать только первый действительный IP-адрес, который он находит. Я имею в виду только IPV4, но он работает с localhost, 127.0.0.1 и фактическим IP-адресом вашей сетевой карты, где приведен пример, предоставленный Microsoft!
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;
}
}
Ответ 13
В моем случае некоторые домены работали, а некоторые - нет. Добавив ссылку на мой прокси-адрес организации Url в моем web.config, исправлена проблема.
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy proxyaddress="http://proxy.my-org.com/" usesystemdefault="True"/>
</defaultProxy>
</system.net>
Ответ 14
Перейдите в проект WCF -
свойства →
→ отладчики
- > снять отметку с флажка
Включить редактирование и продолжить
Ответ 15
В моем сценарии у меня есть два приложения:
Предположение: App1 должен прослушивать действия App2 на порту 5000
Ошибка: запуск App1 и попытка прослушивания, в несуществующий город-призрак, вызывают ошибку
Решение: сначала запустите App2, затем попробуйте прослушать с помощью App1
Ответ 16
Еще одна возможность -
Убедитесь, что вы пытаетесь открыть тот же IP-адрес, что и при прослушивании. Мое серверное приложение прослушивало IP-адрес хост-машины с использованием IPv6, но клиент пытался подключиться к IPv4-адресу хост-машины.
Ответ 17
Я получил эту ошибку из служб ссылок, расположенных на WCFHost, с моего веб-уровня. То, что сработало для меня, может не относиться ко всем, но я оставляю этот ответ тем, кто это может. Номер порта для моего WCFHost был случайным образом обновлен IIS, мне просто нужно было обновить конечные маршруты к ссылкам svc в моей веб-конфигурации. Задача решена.
Ответ 18
Использование WampServer 64bit в Windows 7 Home Premium 64bit Я столкнулся с этой точной проблемой. После нескольких часов и часов экспериментов стало очевидно, что все, что нужно было, было в my.ini, чтобы прокомментировать одну строку. Затем он работал нормально.
прокомментировал 1 строку
сокет = MySQL
Если вы поместите свои старые/данные/файлы в соответствующее место, WampServer примет все из них, за исключением того, что/mysql/папка, которую она записывает. Поэтому я просто импортировал резервную копию данных /mysql/user из моей предыдущей среды разработки и запускал FLUSH PRIVILEGES в окне phpMyAdmin SQL. Прекрасно работает. Что-то должно быть неправильно, потому что все должно быть нелегко.
Ответ 19
У меня часто возникала эта проблема. Я обнаружил, что служба SQL Server Agent
не запущена. Как только я начал сервис вручную, он был исправлен. Дважды проверьте, работает ли служба:
- Запустите приглашение, введите
services.msc
и нажмите enter
- Найдите имя службы -
SQL Server Agent
(имя экземпляра)
Если SQL Server Agent
не запущено, дважды щелкните службу, чтобы открыть окно свойств. Затем нажмите кнопку Start
. Надеюсь, это поможет кому-то.
Ответ 20
Я наткнулся на эту ошибку и занял некоторое время, чтобы ее решить. В моем случае у меня были https и net.tcp, настроенные как привязки IIS на том же порту. Очевидно, что вы не можете иметь две вещи в одном и том же порту. Я использовал команду netstat -ap tcp, чтобы проверить, есть ли что-то прослушивание на этом порту. Не было никого. Удаление ненужной привязки (https в моем случае) решило мою проблему.
Ответ 21
Это была глупая проблема на моей стороне, я добавил defaultproxy к моему web.config, чтобы перехватить трафик в Fiddler, а затем забыл его удалить!
Ответ 22
Существует служба под названием "Обозреватель SQL Server", которая предоставляет клиентам информацию о подключении к SQL Server.
В моем случае ни одно из существующих решений не работало, потому что этот сервис не работал. Я возобновил это, и все вернулось к работе отлично.
Ответ 23
В моем случае это было вызвано неправильным развертыванием, где настройка в моем web.config не была сделана.
Коллега объяснил, что IP-адрес в сообщении об ошибке представляет локальный хост.
Когда я исправил файл web.config, я использовал правильный URL для выполнения вызовов сервера, и это сработало.
Я думал, что отправлю это в случае, если это может кому-то помочь.
Ответ 24
Я столкнулся с этой проблемой сегодня. Мой был Asp.Net Core API, и он использует Postgresql
в качестве базы данных. Мы настроили эту базу данных как контейнер Docker. Итак, первый шаг, который я сделал, - проверить, могу ли я получить доступ к базе данных или нет. Для этого я искал PgAdmin
в начале, так как я настроил то же самое. Нажав на появившееся приложение, вы будете перенаправлены на страницу http://127.0.0.1:23722/browser/. Там вы можете попробовать получить доступ к вашей базе данных в левом меню. Для меня я получил ошибку, как на рисунке ниже.
![enter image description here]()
Введите пароль и попробуйте получить доступ к нему или нет. Для меня это не сработало. Поскольку это Docker-контейнер, я решил перезапустить свой рабочий стол Docker, чтобы сделать это, щелкнуть правой кнопкой мыши на значке Docker на панели задач и нажать перезагрузить.
Однажды после перезапуска Docker я смог войти в систему и увидеть базу данных, а также ошибка исчезла при перезапуске приложения в Visual Studio.
Надеюсь, поможет.