Невозможно установить соединение, потому что целевая машина активно отказалась от него. 127.0.0.1:3446 - PullRequest
66 голосов
/ 14 марта 2012

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

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

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;
        }
    }
}

RESTпроект:

[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());
    }
}

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

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

в System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress) в System.Net.ServicePoint.ConnectSocketInternal (логическое connectFailure, сокет s4, сокет s6, сокет и сокет, IP-адрес и адрес, состояние ConnectSocketState, IAsyncResult asyncResult, тайм-аут Int32, исключение и исключение)

Ответы [ 15 ]

0 голосов
/ 29 декабря 2017

Я также столкнулся с проблемой в .Net Remoting Service в C #.

Я решил ее за 3 шага:

  1. Изменить порт протокола во всех файлах, где бы он ни находилсяused.
  2. Запустите программу хост-сервера и сделайте ее активной.
  3. Теперь запустите клиентскую программу.
0 голосов
/ 23 августа 2017

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

Внутреннее исключение: System.Net.Sockets.SocketException (0x80004005): не удалось установить соединение, поскольку целевая машина активно отказала ему в обслуживании. IP: 443 в System.NetФайл1004 * Разрешение: установите прокси в веб-конфигурации.

<system.net>
    <defaultProxy useDefaultCredentials="true">
      <proxy proxyaddress="http://proxy_ip:portno/" usesystemdefault="True"/>
    </defaultProxy>
</system.net>
0 голосов
/ 02 февраля 2017

У меня была такая же проблема на моем веб-сервере: «Невозможно установить соединение, поскольку целевая машина активно отказывала в этом 161.x.x.235: 5672». Я попросил администратора открыть порт 5672 на веб-сервере, затем он работал нормально.

0 голосов
/ 17 февраля 2016

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

0 голосов
/ 18 июля 2014

Проверьте, совпадает ли номер порта в файле Web.config вашей веб-страницы с номером, который размещен на IIS .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...