Не удалось установить соединение, т. к. конечный компьютер отверг запрос на 127.0.0.1:3446


Я использую шаблон WCF4.0 -остальное. Я пытаюсь сделать метод, который загружает файл с помощью потока.

проблема всегда возникает в

Stream serverStream = request.GetRequestStream();

класс для потоковой передачи:

namespace LogicClass
{
    public class StreamClass : IStreamClass
    {
        public bool UploadFile(string filename, Stream fileStream)
        {
            try
            {
                FileStream fileToupload = new FileStream(filename, FileMode.Create);
                byte[] bytearray = new byte[10000];
                int bytesRead, totalBytesRead = 0;
                do
                {
                    bytesRead = fileStream.Read(bytearray, 0, bytearray.Length);
                    totalBytesRead += bytesRead;
                } while (bytesRead > 0);

                fileToupload.Write(bytearray, 0, bytearray.Length);
                fileToupload.Close();
                fileToupload.Dispose();
            }
            catch (Exception ex) { throw new Exception(ex.Message); }
            return true;
        }
    }
}

остальная проекта:

[WebInvoke(UriTemplate = "AddStream/{filename}", Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
public bool AddStream(string filename, System.IO.Stream fileStream)
{
    LogicClass.FileComponent rest = new LogicClass.FileComponent();
    return rest.AddStream(filename, fileStream);
}

проект Windows Form: для тестирования

private void button24_Click(object sender, EventArgs e)
{
    byte[] fileStream;
    using (FileStream fs = new FileStream("E:stream.txt", FileMode.Open, FileAccess.Read, FileShare.Read))
    {
        fileStream = new byte[fs.Length];
        fs.Read(fileStream, 0, (int)fs.Length);
        fs.Close();
        fs.Dispose();
    }

    string baseAddress = "http://localhost:3446/File/AddStream/stream.txt";
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(baseAddress);
    request.Method = "POST";
    request.ContentType = "text/plain";
    Stream serverStream = request.GetRequestStream();
    serverStream.Write(fileStream, 0, fileStream.Length);
    serverStream.Close();
    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
    {
        int statusCode = (int)response.StatusCode;
        StreamReader reader = new StreamReader(response.GetResponseStream());
    }
}

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

трассировка стека:

в систему.Чистая.Розетки.Гнездо.Создание(конечная точка endPointSnapshot, SocketAddress socketAddress) в системе.Чистая.Менеджмент.ConnectSocketInternal(логическое connectFailure, гнездо С4, С6 гнездо, разъем и гнездо, IP-адрес и адрес, государственный ConnectSocketState, объекта iasyncresult asyncresult, к, int32 значение времени ожидания, исключением& исключение)

13 57

13 ответов:

"активно отказался" означает, что хост отправил сброс вместо ack, когда вы пытались подключиться. Поэтому это не проблема в коде. Либо существует брандмауэр, блокирующий соединение, либо процесс, в котором размещена служба, не прослушивает этот порт. Это может быть потому, что он не работает вообще или потому, что он слушает на другом порту.

Как только вы запустите процесс размещения вашего сервиса, попробуйте netstat -anb (требует права администратора), чтобы убедиться, что это работает и прослушивает ожидаемый порт.

обновление: на Linux вам может понадобиться сделать netstat -anp вместо.

вам не нужно перезагружать компьютер. Вместо того, чтобы перезапустить службы IIS.

Run - > 'cmd'( от имени администратора) и введите "iisreset"

Я получил аналогичное сообщение об ошибке, как код ошибки TCP 10061: не удалось установить соединение, поскольку целевая машина активно отказалась от него в моем текущем проекте. Я нахожу, что этот код ошибки 10061 не может отличить случай, когда конечная точка службы не запущена, и случай, когда она заблокирована брандмауэром. Часто брандмауэр можно отключить, но проблема все еще существует.

вы можете проверить свой код двумя способами.

  1. вставить код, чтобы получить время a, что служба запускается и Время B, что клиент отправляет запрос на сервер. Если B раньше, чем A, это может вызвать эту проблему.
  2. измените порт сервера на другой порт, который также доступен в системе. Вы найдете тот же код ошибки сообщается.

это исправить. Он работает на моей машине. Надеюсь, это поможет!

проверьте, если любая другая программа использует этот порт.

Если экземпляр той же программы все еще активен, убейте этот процесс.

У меня была аналогичная проблема. В моем случае служба будет работать нормально на машине разработчика, но не на машине QA. Оказалось, что на машине QA приложение не запускалось от имени администратора и не имело разрешения на регистрацию конечной точки:

HTTP не удалось зарегистрировать URL HTTP://в+:12345/ФОО.svc/]. Ваш процесс не имеют прав доступа к этому пространству имен (см. http://go.microsoft.com/fwlink/?LinkId=70353 относительно деталей.)

смотрите здесь, как заставить его работать, не будучи пользователем администратора:https://stackoverflow.com/a/885765/38258

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

Я использую этот инструмент для этого; он автоматизирует все эти громоздкие шаги.

у меня была похожая проблема отвергая localhost и 127.0.0.1. cmd (admin) netstat -anb нашел порт, работающий на 169.254.80.80 (не знаю, был ли этот ip, потому что мой сетевой ip был 10.0.0.5. после ввода этого IP он работал. Это дает правильный IP:

IPAddress ipAddress = ipHostInfo.AddressList[0];
Console.WriteLine(ipAddress.ToString());

проверьте, есть ли номер порта в файле Web.конфигурация вашей веб-страницы такая же, как и та, которая размещена на IIS.

с этой ошибкой я смог отследить его, благодаря @Yaur, вам нужно в основном проверить службу (WCF), если она работает, а также проверить исходящие и входящие свойства TCP в настройках Вашего предварительного брандмауэра.

У меня была такая же проблема на моем веб-сервер "не удалось установить соединение, т. к. конечный компьютер отверг 161.х.х.235:5672". Я попросил администратора открыть порт 5672 на веб-сервере, тогда он работал нормально.

с аналогичным шаблоном мой клиент rest вызывает API службы, службу, которая успешно вызывается при отладке, но не работает над опубликованным кодом. Ошибка: не удалось подключиться к удаленному серверу.

Внутреннее Исключение: Система.Чистая.Розетки.Исключения socketexception (0x80004005 при): не удалось установить соединение, т. к. конечный компьютер отверг serviceIP:443 в системе.Чистая.Розетки.Гнездо.Создание(конечная точка endPointSnapshot, SocketAddress socketAddress) в Системы.Чистая.Менеджмент.ConnectSocketInternal(логическое connectFailure, гнездо С4, С6, гнездо, разъем и гнездо, IP-адрес и адрес, государственный ConnectSocketState, объекта iasyncresult asyncresult, к, исключение& исключение)

разрешение: установите прокси-сервер в веб-конфигурации.

<system.net>
    <defaultProxy useDefaultCredentials="true">
      <proxy proxyaddress="http://proxy_ip:portno/" usesystemdefault="True"/>
    </defaultProxy>
</system.net>

необходимо настроить прокси-сервер системы Вы должны пройти этот путь панель управления> > опция Интернет> > подключение> > настройки локальной сети>> полномочие нет ТИК:использовать прокси-сервер

Я тоже столкнулся с проблемой .Сетевая служба удаленного доступа в C#.

Я получил его решить в 3 этапа:

  1. изменить порт протокола во всех файлах, где он используется.
  2. запустите программу хост-сервера и сделайте ее активной.
  3. теперь запустите клиентскую программу.