无法建立连接,因为目标计算机主动拒绝了127.0.0.1:3446


73

我使用的是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());
    }
}

我已关闭防火墙和Internet连接,但该错误仍然存​​在。有没有更好的测试上传方法的方法?

堆栈跟踪:

在System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure,Socket s4,Socket s6,Socket&socket,IPAddress&地址,ConnectSocketState状态,IAsyncResult asyncResult,Int32超时,例外和例外)


1
您无需担心本地连接的防火墙或Internet连接。在您的代码中,您正在连接到端口,8000但在错误消息中,端口是3446。这相关吗?
马特·米切尔

@Graphain是一个错字错误。感谢您提及。请看我的编辑。
FiberOptics 2012年

Answers:


139

“主动拒绝”表示您尝试连接时主机发送了重置而不是确认。因此,这不是您的代码中的问题。有防火墙阻止了连接,或者托管服务的进程未在该端口上侦听。这可能是因为它根本没有运行或者是在其他端口上监听。

一旦开始托管服务的过程,请尝试netstat -anb(需要管理员权限)以验证其是否正在运行并在预期的端口上进行侦听。

更新:在Linux上,您可能需要这样做netstat -anp


4
感谢您的帮助netstat -anb,我在列表中找不到端口。您知道一些解决此问题的可能步骤吗?我已经关闭了防火墙,禁用了防病毒软件并禁用了Internet连接,但是仍然存在错误。
FiberOptics 2012年

1
您如何托管服务?如果您只是从Visual Studio中退出f5,则它是iisexpress.exe中托管的IIRC。您可以在托管过程的同一列表中查看其监听的端口。
Yaur 2012年

2
“您如何托管服务?” 这真的让我思考了一段时间。我尝试运行将服务托管到3445的其余项目,还运行Windows窗体项目,并将主机也定位到3445。然后一切顺利。谢谢!谢谢大家 你帮了我很多忙
FiberOptics 2012年

1
我已经按照您的指示在我的登台服务器上完成了所有设置(防火墙,端口,启用WcF服务),但是仍然出现相同的错误,请您指导我吗?
Trilok Pathak

1
@suBDavis-an b是特定于Linux的。原始版本在Windows(这是大多数人用来开发WCF服务的平台)上工作得很好(而更新后的版本则不行)。就是说,我已经用Linux等效版本更新了答案,因为对于那些与原始问题仅切线相关的事情,现在这已成为Google的热门话题。
Yaur

15

您不必重新启动PC。而是重新启动IIS。

运行->'cmd'(以管理员身份),然后输入“ iisreset”


1
我在执行该操作时会看到该端口,netstat -anb并且还重新启动了服务器。还是同样的错误,有帮助吗?
塔希尔·亚辛

1
棒极了!重新启动iis为我解决了这个问题。其他解决方案均无效这一个被低估了!
JayPex

2

我收到类似的错误消息,例如TCP错误代码10061:无法建立连接,因为目标计算机在当前项目中主动拒绝了它。我发现此10061错误代码无法区分服务端点未启动和被防火墙阻止的情况。通常,可以关闭防火墙,但是问题仍然存在。

您可以通过以下两种方式测试代码。

  1. 插入代码以获取启动服务的时间A和客户端将请求发送至服务器的时间B。如果B早于A,则可能导致此问题。
  2. 将服务器端口更改为系统中也可用的另一个端口。您会发现报告了相同的错误代码。

以上是我的解决方法。它可以在我的机器上运行。希望对您有所帮助!



2

您必须设置系统代理。您必须通过以下路径进行控制面板>>互联网选项>>连接>> LAN设置>> proxy no tik:使用代理服务器


1

检查是否有其他程序正在使用该端口。

如果同一程序的实例仍处于活动状态,请终止该进程。


我已经完成了,实际上我有一个示例控制台项目,用于测试端口是否可用。
FiberOptics 2012年

遇到此问题时,实际上我必须重新启动PC才能释放端口。
Tanveer-Ibn- Haresh'3

2
您是否尝试过仅更改端口号?我有幸主持了CruiseControl的类似的问题,在配置,这是我无法用netstat扫描发现改变的端口号..
Tanveer-Ibn- Haresh

您应该发布您的web.config。我猜端点配置有问题。
Tanveer-Ibn- Haresh'3

1

我有一个类似的问题。就我而言,该服务在开发人员计算机上可以正常运行,但在质量检查机器上时将失败。原来,在质量检查机器上,该应用程序不是以管理员身份运行的,并且没有注册端点的权限:

HTTP无法注册URL http:// +:12345 / Foo.svc /]。您的进程没有对此名称空间的访问权限(有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=70353)。

请参阅此处以了解如何在不成为管理员用户的情况下正常工作:https : //stackoverflow.com/a/885765/38258


1

如果使用WCF风暴,甚至可以登录到WCF服务端点?如果没有,并且您将其托管在Windows服务中,则可能忘记了注册该名称空间。并没有很好地宣传此步骤是必需的,而且这样做确实很烦人。

我使用这个工具来做到这一点;它可以自动执行所有繁琐的步骤。


1

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


0

有了这个错误,由于有了@Yaur,我得以跟踪到该错误,您基本上需要检查服务(WCF)是否正在运行,并且还需要检查高级防火墙设置上的出站和入站TCP属性。


0

我的Web服务器上出现了相同的问题“无法建立连接,因为目标计算机主动拒绝它161.xx235:5672”。我要求管理员在Web服务器上打开端口5672,然后工作正常。


1
在您的服务器中,打开“具有高级安全性的Windows防火墙”。添加新的入站/出站TCP规则,输入端口5672。您最好请网络管理员为您执行此操作。
洪武

0

使用类似的模式,我的其余客户端正在调用服务API,该服务在调试时成功调用,但无法处理已发布的代码。错误是:无法连接到远程服务器。

内部异常:System.Net.Sockets.SocketException(0x80004005):无法建立连接,因为目标计算机主动拒绝了它。system.Net.Sockets.Socket.DoConnect处的serviceIP:443(System.Net处的EndPoint endPointSnapshot,SocketAddress socketAddress) .ServicePoint.ConnectSocketInternal(布尔connectFailure,套接字s4,套接字s6,套接字和套接字,IP地址和地址,ConnectSocketState状态,IAsyncResult asyncResult,异常和异常)

解决方法:在Web配置中设置代理。

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

0

我还遇到了C#中的.Net远程服务的问题。

我通过3个步骤解决了问题:

  1. 无论使用什么位置,请在所有文件中更改协议端口。
  2. 运行您的主机服务器程序并将其激活。
  3. 现在运行您的客户端程序。

0

我有一个类似的问题。以我为例,Psiphon VPN等VPN代理应用更改了Windows中的代理设置,因此请遵循以下步骤:

在Windows 10中,搜索更改代理设置并在手动代理中启用代理服务器


0

确保您的应用程序使用的所有服务均已打开,并且正在使用主机和端口来利用它们。例如,例如在我的情况下,如果您的应用程序正在使用Redis服务器并且无法在给定的端口和主机上与其连接,则可能会发生此错误。



-1

简介:在测试拳头网络应用程序时遇到了此类问题。我创建了:客户端和服务器,然后运行客户端,突然抛出异常,的确阻止了连接,因为未监听端口!

错误:服务器未关闭我的端口,因为服务器已关闭。

解决方案:首先运行服务器,以便服务器将侦听该端口,并且一旦客户端尝试连接服务器,服务器便会处理该端口。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.