簡體   English   中英

無法建立連接,因為目標機器主動拒絕它 127.0.0.1:3446

[英]No connection could be made because the target machine actively refused it 127.0.0.1:3446

我正在使用 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;
        }
    }
}

休息項目:

[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 窗體項目:用於測試

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

我已關閉防火牆和 Internet 連接,但錯誤仍然存​​在。 有沒有更好的方法來測試上傳方法?

堆棧跟蹤:

在 System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) 在 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout,異常&異常)

“主動拒絕它”意味着當您嘗試連接時主機發送了重置而不是確認。 因此,這在您的代碼中不是問題。 要么是防火牆阻止了連接,要么是托管服務的進程未在該端口上偵聽。 這可能是因為它根本沒有運行,或者因為它正在偵聽不同的端口。

啟動托管服務的進程后,請嘗試netstat -anb (需要管理員權限)以驗證它是否正在運行並在預期端口上偵聽。

更新:在 Linux 上,您可能需要改為執行netstat -anp

您不必重新啟動 PC。 而是重新啟動 IIS。

運行 -> 'cmd'(以管理員身份)並輸入“iisreset”

我收到類似TCP 錯誤代碼 10061的類似錯誤消息:無法建立連接,因為目標機器在我當前的項目中主動拒絕了它 我發現這個10061錯誤代碼無法區分服務端點未啟動的情況和被防火牆阻止的情況。 通常,可以關閉防火牆,但問題仍然存在。

您可以通過以下兩種方式測試您的代碼。

  1. 插入代碼以獲取服務啟動的時間 A 和客戶端向服務器發送請求的時間 B。 如果 B 早於 A,則可能會導致此問題。
  2. 將您的服務器端口更改為系統中也可用的另一個端口。 您會發現報告的錯誤代碼相同。

以上是我的修復。 它適用於我的機器。 我希望它有幫助!

你必須設置你的系統代理你必須通過這個路徑控制面板>>互聯網選項>>連接>>局域網設置>>代理沒有tik:使用代理服務器

我有一個類似的問題。 在我的情況下,該服務在開發人員機器上可以正常工作,但在 QA 機器上會失敗。 事實證明,在 QA 機器上,應用程序沒有以管理員身份運行,也沒有注冊端點的權限:

HTTP 無法注冊 URL http://+:12345/Foo.svc/] 您的進程無權訪問此命名空間(有關詳細信息,請參閱http://go.microsoft.com/fwlink/?LinkId=70353 )。

請參閱此處了解如何在沒有管理員用戶的情況下使其工作: https : //stackoverflow.com/a/885765/38258

檢查您網頁的 Web.config 文件中的端口號是否與托管在IIS上的端口號相同。

我在我的網絡服務器上遇到了同樣的問題“無法建立連接,因為目標機器主動拒絕了它 161.xx235:5672”。 我讓管理員在 Web 服務器上打開端口 5672,然后它工作正常。

我在拒絕 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());

檢查是否有任何其他程序正在使用該端口。

如果同一程序的實例仍處於活動狀態,則終止該進程。

如果你使用WCF Storm,你甚至可以登錄WCF服務端點嗎? 如果沒有,並且您將它托管在 Windows 服務中,則您可能忘記注冊該命名空間。 沒有很好地宣傳這一步是必需的,而且這樣做實際上很煩人。

我使用這個工具來做到這一點 它使所有這些繁瑣的步驟自動化。

有了這個錯誤,我能夠跟蹤它,感謝@Yaur,您需要基本上檢查服務(WCF)是否正在運行,並檢查您的高級防火牆設置中的出站和入站 TCP 屬性。

使用類似的模式,我的其余客戶端正在調用服務 API,該服務在調試時成功調用,但無法處理已發布的代碼。 錯誤是:無法連接到遠程服務器。

內部異常:System.Net.Sockets.SocketException (0x80004005):無法建立連接,因為目標機器主動拒絕它 serviceIP:443 at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net .ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket&socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception&異常)

解決方法:在 Web 配置中設置代理。

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

我在 C# 中的 .Net Remoting Service 中也遇到了問題。

我分3步解決了:

  1. 在所有使用它的文件中更改協議端口。
  2. 運行您的主機服務器程序並使其處於活動狀態。
  3. 現在運行您的客戶端程序。

我有一個類似的問題。 在我的情況下,VPN 代理應用程序(例如 Psiphon Ì)更改了 Windows 中的代理設置,因此請遵循以下步驟:

在 Windows 10 中,搜索更改代理設置並在手動代理中關閉使用代理服務器

確保您的應用程序使用的所有服務都已打開,這些服務正在使用主機和端口來利用它們。 例如,在我的情況下,如果您的應用程序正在使用 Redis 服務器並且無法在給定的端口和主機上連接到它,則可能會出現此錯誤,從而產生此錯誤。

我無法重新啟動 IIexpress。 這是對我有用的解決方案

  1. 清理了構建
  2. 重建

就我而言,我有一個帶有ASP.NET CoreAngular SLA項目模板。

我試圖從 Visual Studio WebUI 解決方案運行IIS Express ,觸發了“主動拒絕它”錯誤。

在此處輸入圖片說明


在這種情況下,問題與阻止連接的防火牆無關。

事實證明,我必須獨立於Kestrel運行Angular服務器,因為服務器期望 UI 在特定端口上運行,但實際上並非如此。


有關更多信息,請查看 Microsoft 官方文檔

我有類似的問題。 在 launchSettings 中,我的 IIS Express 是在一個端口上配置的,還有另一個啟動配置文件在另一個具有另一個端口的 ApplicationUrl 上啟動。

使用 IIS Express 配置文件啟動 Web 應用程序導致我出現錯誤。

我正在使用 Apache ActiveMQ Artemis AMQP 消息代理。 在重新啟動后嘗試使用它發送和接收消息時,我開始收到“無法建立連接,因為目標機器主動拒絕它”。 在相同類型的代理仍然工作的計算機上,netstat -anb 顯示代理正在偵聽預期的端口 5672。在出現錯誤的計算機上,代理沒有偵聽。 在出現錯誤的計算機上,啟動代理會導致 Microsoft 事件查看器的“Windows 日志 > 系統”中出現以下警告:

 The system failed to register host (A or AAAA) resource records for network adapter
 with settings:

            Adapter Name : {286EE2DA-3D81-41AE-VE5G-5D761FD3925E}
            Host Name : mypc
            Primary Domain Suffix : myco.com
            DNS server list :
                55.77.168.1, 74.86.130.1
            Sent update to server : 186.952.335.157:45
            IP Address(es) :
              182.269.1.437

 Either the DNS server does not support the DNS dynamic update protocol or the authoritative zone for the specified DNS domain name does not accept dynamic updates.

 To register the DNS host (A or AAAA) resource records using the specific DNS domain name and IP addresses for this adapter, contact your DNS server or network systems administrator.

在具有管理權限的 cmd.exe 中運行以下命令后,我能夠毫無錯誤地使用代理,重新啟動並等待大約 15 分鍾:

       ipconfig /flushdns
       ipconfig /renew
       ipconfig /registerdns

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM