Иногда я получаю следующую ошибку при выполнении HttpWebRequest к WebService. Я также скопировал свой код ниже.
System.Net.WebException: Невозможно подключиться к удаленному серверу ---> System.Net.Sockets.SocketException: Не удалось установить соединение, так как целевая машина активно отказалась от него 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) --- Конец трассировки стека внутренних исключений --- 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, 2 или 3 не являются необычными - и поэтому ОС может быть не в состоянии поставить ваш запрос в очередь на 'принятие'.
Бэклог является параметром функции listen
- все языки и платформы имеют практически одинаковый API в этом отношении, даже C# one. Этот параметр часто настраивается, если вы управляете сервером, и, скорее всего, считывается из какого-то файла настроек или реестра. Узнайте, как настроить ваш сервер.
Если вы написали сервер, у вас может быть тяжелая обработка в accept вашего сокета, и это может быть лучше перенести в отдельный рабочий поток, чтобы ваш accept всегда был готов к приему соединений. Существуют различные варианты архитектуры, которые можно изучить, чтобы смягчить постановку клиентов в очередь и их последовательную обработку.
Независимо от того, можете ли вы увеличить отставание сервера, вам нужна логика retry в вашем клиентском коде, чтобы справиться с этой проблемой - поскольку даже при большом отставании сервер может получать много других запросов на этом порту в это время.
Существует редкая возможность, что NAT-маршрутизатор выдаст эту ошибку, если его порты для сопоставлений будут исчерпаны. Я думаю, что мы можем отбросить эту возможность как слишком маловероятную, так как маршрутизатор имеет 64K одновременных соединений с одним и тем же адресом назначения/портом до исчерпания.
Наиболее возможная причина - брандмауэр.
Эта статья содержит набор причин. Она может оказаться полезной для вас.
Из статьи следует, что возможными причинами могут быть:
Это случилось и со мной. Иногда, когда я открывал свой проект, появлялась эта ошибка, что очень расстраивало. Проблема заключалась в том, что иногда номер порта веб-службы неожиданно менялся.
Эта проблема обычно возникает, когда у вас есть несколько копий проекта.
Мой проект вызывал веб-службу с определенным номером порта, который я назначил в файле Web.Config основного файла проекта. Поскольку номер порта неожиданно изменился, браузер не смог найти веб-службу и выдал ошибку.
Я решил эту проблему, выполнив следующие шаги: (Visual Studio 2010)
Перейдите в Свойства проекта
Web service
--> нажмите на вкладку Web --> В разделе Servers --> Отметьте Specific port и затем назначьтестандартный номер порта
, по которому ваш основной проект вызывает веб-сервис.
Надеюсь, это решит проблему.
Будьте здоровы :)
У меня была та же проблема. Проблема в том, что я этого'т запустить сервер Selenium. Я скачал сервер Selenium и я начал его. После запуска сервер Selenium, проблема исчезла и все работало нормально.
Смотрите это : http://coding-issues.blogspot.in/2012/11/no-connection-could-be-made-because.html
Это действительно специфический, но если вы получаете эту ошибку после попытки подключиться к базе данных с помощью монго, что работал для меня была запущена mongod.exe перед запуском mongo.exe и тогда связь работала нормально. Надеюсь, что это помогает кто-то.
Я столкнулся же ошибку, потому что если ваш сервер и клиент работают на одной машине клиент нужен сервер локальный IP-адрес не публичный IP-адрес для связи с сервером нужен публичный IP-адрес только в том случае, когда сервер и клиент работают на отдельном компьютере, так что используйте локальный IP-адрес в программу-клиент для соединения с сервером локального IP-адреса могут быть найдены с помощью этого метода.
public static string Getlocalip()
{
try
{
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
return localIPs[7].ToString();
}
catch (Exception)
{
return "null";
}
}
Ну, я'ве получил эту ошибку сегодня на Windows 8 64-немного неожиданно, в первый раз, и оказалось, что мой мой.Ини был сброшен, и файл bin/mysqld версии были удалены, среди прочих элементов, в `"и программные файлы/СУБД MySQL/MySQL сервера 5.6" в папку.
Чтобы исправить это, мне пришлось снова запускать установщика MySQL, установки только сервер, и скопировать последнюю версию мой.файл ini с "в папке ProgramData./СУБД MySQL/MySQL сервера 5.6", у
, названная my_2014-03-28T15-51-20.Ини в моем случае (Дон'т знаю, как или почему это стало так недавно скопировали туда) обратно в
"и программные файлы/СУБД MySQL/MySQL сервера 5.6"`в.
Единственное изменение в системе начиная с MySQL работал, была установка родной инструментов' Трактор 2 и Трактор аудио 2 звуковой карты, который на самом деле должен'т быть вызваны этой проблемой, и никто другой системы, кроме меня. Если кто знает, было бы вы прокомментировать, чтобы предотвратить это для меня и всех, кто столкнулся с этой.
У меня была такая же ошибка с моей службы WCF с использованием сетевого протокола TCP привязки, но разрешен после запуска указанных ниже услуг, в моем случае.
Чистый.Трубы.Слушателя.Адаптер
Чистый.Протокол TCP.Слушателя.Адаптер
Чистый.Служба Общего Доступа К Портам TCP
Я получил эту ошибку в приложении, которое использует в AppFabric. Ключ получал DataCacheException
в стек трассировки. Чтобы увидеть, если это проблема для вас, выполните следующую команду PowerShell:
Ланг-пс1 @("и AppFabricCachingService" и"Ну RemoteRegistry", У) | % { Вам-услуги $_ }
Если любой из этих двух служб остановлена, то вы получите эту ошибку.
Для справки в решение.
Перезагрузите вашу рабочую станцию
Перестройте свое решение
Обновить ссылку на службу в проект 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] ошибка - ошибка: системе.Чистая.Розетки.Исключения socketexception (0x80004005 при): не удалось установить соединение, т. к. конечный компьютер отверг [на fe80::САА: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;
}
}
В моем случае, некоторые домены работали, а некоторые нет. Добавление ссылки в моей организации'ы адрес прокси-сервера в веб.конфигурации Исправлена проблема.
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy proxyaddress="http://proxy.my-org.com/" usesystemdefault="True"/>
</defaultProxy>
</system.net>
Еще одна возможность --
Убедитесь, что вы'вновь пытается открыть тот же IP-адрес, где вы'повторно слушать. Мое приложение-сервер слушал хозяина машины's с IP-адресов с помощью протокола IPv6, но клиент пытается подключиться на хост-машине' - адрес вместо адреса IPv4.
В моем случае это было вызвано неисправной развертывания, где сидел в своем интернете.конфиг не был сделан.
Коллега объяснил, что IP-адрес в сообщении об ошибке указывает на localhost.
Когда я исправил интернете.конфиг я тогда был с помощью правильного URL для выполнения на сервер и он работал.
Я думал, что я отправлю это в случае, если это может помочь кому-то.
В моем случае, у меня есть два приложения:
** предположение: приложение app1 должны слушать для app2'ы деятельность на порт 5000
ошибка: начиная app1 и пытаюсь слушать, несуществующий город-призрак, выдает ошибку
решение: запуск приложения app2 во-первых, тогда попробуйте слушать через приложение app1
У меня эта проблема происходит часто. Я нашел службу агента SQL сервер не работает. Как только я начинал службу вручную, она была исправлена. Дважды проверить, если служба запущена или нет:
SQL сервер агент
(имя экземпляра)Если агент SQL сервер не запущен, дважды щелкните службу, чтобы открыть окно Свойства. Затем нажмите на кнопку "Запустить". Надеюсь, это поможет кому-то.
Это был глупый вопрос с моей стороны, я добавил defaultproxy в мою паутину.конфиг для того, чтобы перехватить трафик в Fiddler, а потом забыл удалить его!
Есть сервис, называемый "в SQL Server, Обозреватель", которую предоставляет сведения о подключении к SQL Server для клиентов.
В моем случае, ни одно из существующих решений не работает, потому что эта служба не работает. Я возобновил его и все вернулось на отлично работает.