2010-06-04 3 views
182

Иногда я получаю следующую ошибку, когда я делал 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(); 

ответ

25

Наиболее возможной причиной является брандмауэр.

This article содержит ряд причин. Это может быть полезно для вас.

Из статьи, возможные причины:

  • настройки сервера FTP
  • Программное обеспечение/Персональные настройки брандмауэра
  • Многократное Программное обеспечение/Персональные брандмауэры
  • Антивирусное ПО
  • LSP Layer
  • Прошивка маршрутизатора
  • Com PUTER Выключен
  • Компьютер не подключен
+9

Мой брандмауэр выключен; Но снова получите ошибку! –

+7

Я знаю, что это старый, но вы можете добавить Fiddler в этот список. отключение скрипача во время запуска приложения, а затем повторное подключение сделало мои сокеты правильными. – ps2goat

+0

Thumb up for Fiddler –

144

Если это происходит всегда, это буквально означает, что машина существует, но что он не имеет никаких услуг прослушивания на указанном порту, или есть брандмауэр останавливает вас.

Если это случается иногда - вы использовали слово «иногда» - и повторная попытка выполняется успешно, это вполне вероятно, потому что у сервера есть полное «отставание».

Когда вы ожидаете быть accept ed в прослушивающем сокете, вы попадаете в отставание. Это отставание является конечным и довольно коротким - значения 1, 2 или 3 не являются необычными - и поэтому ОС может оказаться не в состоянии поставить в очередь ваш запрос на «принятие» для потребления.

Задержка является параметром функции listen - все языки и платформы имеют в основном тот же API в этом отношении, даже C# one. Этот параметр часто настраивается, если вы управляете сервером и, вероятно, читаете его из какого-либо файла настроек или реестра. Узнайте, как настроить сервер.

Если вы написали сервер, у вас может быть тяжелая обработка при приеме вашего сокета, и это может быть лучше перемещено в отдельный рабочий поток, чтобы ваш прием всегда был готов к подключению. Существуют различные варианты архитектуры, которые вы можете исследовать, которые смягчают очередность клиентов и обрабатывают их последовательно.

Независимо от того, может ли увеличить отставание сервера, вам необходимо повторных попыток логики в коде клиента, чтобы справиться с этой проблемой - так как даже с длинным отставанием сервер может получать много других запросов на этом порту в то время.

Существует редкая возможность, когда NAT-маршрутизатор выдаст эту ошибку, если ее порты для сопоставлений будут исчерпаны. Я думаю, что мы можем отбросить эту возможность как слишком длинный снимок, хотя, поскольку маршрутизатор имеет одновременное соединение 64K с одним и тем же адресом/портом назначения до исчерпания.

+0

Да, я получаю это иногда, не всегда, я не думаю, что причиной является брандмауэр или что-то еще, но причиной этого может быть отставание. Есть ли способ решить эту проблему? – hsnkvk

+0

@hsnkvk; надлежащий надежный способ заключается в том, чтобы клиент имел петлю повтора; ответ обновляется соответственно – Will

+0

@Will; У меня уже есть iterationCount, и я повторяю iterationCount раз, если он терпит неудачу. :( – hsnkvk

10

Это случилось и со мной. Иногда, когда я открываю свой проект, эта ошибка показалась неудачной. Проблема заключалась в том, что иногда порт-номер веб-службы неожиданно менялся.

Эта проблема обычно происходит, когда у вас есть более одного экземпляра проекта

Мой проект был вызывающему веб-службы с определенным номером порта, который я присвоенной в файле Web.config моего основного файла проекта , Поскольку номер порта неожиданно изменился, браузеру не удалось найти веб-службу и выбросить эту ошибку.

Я решил эту проблему, выполнив следующие действия: (Visual Studio 2010)

Go to Properties of the Web service project --> click on Web tab --> In Servers section --> Check Specific port and then assign the standard port number by which your main project is calling the web service.

Я надеюсь, что это решит проблему.

Приветствия :)

+2

Для меня это не было общеизвестным. Я был смущен, так как я понимаю, почему моя ошибка указала мне «LocalHost: 2532». Оказывается, он был установлен таким образом предыдущим владельцем в указанном вами районе. Теперь, когда эта тайна понятна, это делает некоторые другие вещи менее загадочными. Благодаря! – Suamere

0

Я получил эту ошибку при ссылке услуг, расположенных на WCFHost от моего веб-уровня. То, что сработало для меня, может не относиться ко всем, но я оставляю этот ответ тем, кто это может. Номер порта для моего WCFHost был случайным образом обновлен IIS, мне просто нужно было обновить конечные маршруты к ссылкам svc в моей веб-конфигурации. Задача решена.

2

Я получил эту ошибку в приложении, использующем AppFabric. Подсказка заключалась в получении DataCacheException [1] в трассировке стека. Чтобы убедиться в этом, выполните следующую команду PowerShell:

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

Если какая-либо из этих служб остановлена, вы получите эту ошибку.

[1] http://msdn.microsoft.com/en-us/library/microsoft.applicationserver.caching.datacacheexception.aspx

+0

Спасибо. В качестве побочного примечания, для будущей ссылки на меня и на других, это * появилось *, чтобы работать с wen, я начал службу, но приложение все время медлило, и я, наконец, twigged (d'uh), что служба на другом сервере в кластер AppFabric не был включен. – Mark

0

Использование WampServer 64bit на Windows 7 Home Premium 64bit Я столкнулся с этой точной задачи. После нескольких часов и часов экспериментов стало очевидно, что все, что нужно было, было в my.ini, чтобы прокомментировать одну строку. Тогда это сработало.

закомментирован 1 линия сокета = MySQL

Если поместить старые/данные/файлы в соответствующем месте, WampServer будет принимать все из них для/MySQL/папки, которая его над исключением записи. Поэтому я просто импортировал резервную копию данных/mysql/user из моей предыдущей среды разработки и запускал FLUSH PRIVILEGES в окне phpMyAdmin SQL. Прекрасно работает. Что-то должно быть неправильно, потому что все должно быть нелегко.

4

У меня была та же проблема. Проблема в том, что я не запускал сервер селена. Я загрузил сервер selenium, и я начал его. После запуска сервера selenium проблема исчезла, и все было хорошо.

см это: http://coding-issues.blogspot.in/2012/11/no-connection-could-be-made-because.html

+1

Вопрос ничего не говорил о сервере селена. –

+1

@GeoffDawdy Это просто еще один пример по причине № 1 из [ответа Уилла] (http://stackoverflow.com/a/2972662/2932052) - поддерживает обучение через повторение ;-) – Wolf

2

Ну, я получил эту ошибку сегодня на Windows 8 64-бит из голубой, в первый раз, и оказывается, что мой my.ini был сброшен, и файл 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, - это установка Traktor 2 Native Instruments и звуковой карты Traktor Audio 2, которая действительно не должна была вызывать эту проблему, и никто другой не использовал систему помимо меня , Если у кого-то есть ключ, вам будет некогда прокомментировать, чтобы предотвратить это для меня и для всех, кто столкнулся с этим.

+0

У меня была такая же проблема, и я мог решить эту проблему это остановить услуги MyQsl через services.msc. Тем не менее, после этого MySql недоступен, поэтому вам нужно перезагрузить компьютер, чтобы он снова появился. – Gabriel

2

У меня была такая же ошибка с моей службой WCF с использованием привязки Net TCP, но была решена после запуска нижеуказанных служб в моем случае.

Net.Pipe.Listener.Adapter

Net.TCP.Listener.Adapter

Net.Tcp Sharing Порт Сервис

+1

Блестящий, я вытягивал свои волосы. Сноска: Запуск моей службы WCF NET.TCP на ПК с Windows 7 не требовал, чтобы эти 3 службы выполнялись. Тем не менее, работая на Windows Server (я тестировал 2003 и 2008), эти службы * имели * для работы WCF для исправления. – smirkingman

4

Я думаю, вам необходимо проверить настройки прокси-сервера в «интернет-вариантах». Если вы используете приложения proxy/'hide ip', эта проблема может возникнуть.

+0

СПАСИБО! Я слишком долго был в тупике! –

+0

Является ли это типичной проблемой Windows 7? Существуют ли по умолчанию разные значения по сравнению с другими версиями Windows? – Wolf

+0

@ Вольф, я думаю, это не проблема с окнами. но это может быть проблема подключения. – isaeid

1

Для справки по обслуживанию в рамках решения.

  1. Перезагрузите ваш компьютер

  2. Rebuild ваше решение

  3. ссылку Обновление службы в проекте WCFclient

На данный момент, я получил messsage (Windows 7), чтобы разрешить доступ к системе. Затем ссылка на службу была обновлена ​​должным образом без ошибок.

2

Я хотел бы поделиться этим ответом, который я нашел, потому что причиной проблемы был не тот брандмауэр или процесс, который не прослушивался правильно, это был пример кода, предоставленный Microsoft, который я использовал.

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): соединение не может быть выполнено, потому что целевая машина активно отказалась от него [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; 
     } 
    } 
3

Это действительно специфична, но если вы получаете эту ошибку при попытке подключения к базе данных с помощью Монго, что работало для меня работает mongod.exe перед запуском Монго.exe, а затем соединение работало нормально. Надеюсь, это поможет кому-то.

+1

Это работает для меня. Спасибо – YeeKhin

0

В моем случае, у меня есть два приложения:

  • app1
  • app2

Assumption: App1 should listen to App2's activities on Port 5000

Error: Starting App1 and trying to listen, to a nonexistent ghost town, produces the error

Solution: Start App2 first, then try to listen using App1

0

Я имел этот вопрос часто происходит. Я нашел SQL Server Agent обслуживание не было. Как только я начал сервис вручную, он был исправлен. Дважды проверьте, если служба запущена или нет:

  1. Выполнить запрос, введите services.msc и нажмите клавишу ВВОД
  2. Найти имя службы - SQL Server Agent (Instance Name)

Если SQL Server Agent не работает , дважды щелкните службу, чтобы открыть окно свойств. Затем нажмите на кнопку Start. Надеюсь, это поможет кому-то.

2

В моем случае некоторые домены работали, а некоторые - нет. Добавление ссылки на прокси-адрес моей организации в моем web.config устраняет проблему.

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

я столкнулся с тем же ошибками, потому что, когда ваш сервер и клиент работают на одном компьютере Клиенту нужен локальный сервер IP-адрес не Громкая IP для связи с сервером, необходимо общедоступный адрес IP-только в том случае, когда сервер и клиент работают на отдельный компьютер, поэтому используйте локальный IP-адрес в клиентской программе для подключения к серверу. Локальный IP-адрес можно найти с помощью этого метода.

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

      return "null"; 
     } 

    } 
+0

Это был мой сценарий: в качестве альтернативного решения, если вы указываете на имя хоста, которое разрешает публичный IP-адрес, вы также можете отредактировать HOST-файл своего сервера и добавить правило, которое маршрутизирует ваше имя хоста - 127.0.0.1. – Darkseal

0

Еще одна возможность -

Убедитесь, что вы пытаетесь открыть тот же IP-адрес, где вы слушаете. Мое серверное приложение прослушивало IP-адрес хост-машины с использованием IPv6, но клиент пытался подключиться к IPv4-адресу хост-машины.

2

Сходи в WCF проекта - свойства -> Web -> отладчики -> Снимите флажок

Enable Edit and Continue

+0

Спасибо. Это простое изменение также решило мою проблему. –

+0

Это было легко. Решила мою проблему! Спасибо. –

0

Я наткнулся на эту ошибку, и потребовалось некоторое время, чтобы решить ее. В моем случае у меня были https и net.tcp, настроенные как привязки IIS на том же порту. Очевидно, что вы не можете иметь две вещи в одном и том же порту. Я использовал команду netstat -ap tcp, чтобы проверить, есть ли что-то прослушивание на этом порту. Не было никого. Удаление ненужных привязок (https в моем случае) решило мою проблему.

0

Это была глупая проблема на моей стороне, я добавил defaultproxy к моему web.config, чтобы перехватить трафик в Fiddler, а затем забыл удалить его!

Смежные вопросы

 Смежные вопросы