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

时间:2012-03-14 02:43:25

标签: c# wcf rest httpwebrequest

我正在使用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窗体项目:用于测试

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)          at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure,Socket s4,Socket s6,Socket& socket,IPAddress& address,ConnectSocketState state,IAsyncResult asyncResult,Int32 timeout,Exception& exception)

18 个答案:

答案 0 :(得分:127)

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

启动托管服务的流程后,请尝试netstat -anb(需要管理员权限)来验证它是否正在运行并正在侦听预期的端口。

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

答案 1 :(得分:11)

您无需重新启动PC。改为重新启动IIS。

  

运行 - > 'cmd'(作为管理员)并输入“iisreset”

答案 2 :(得分:2)

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

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

  1. 插入代码以获取时间A服务启动以及客户端将请求发送到服务器的时间B.如果B早于A,则可能导致此问题。
  2. 将您的服务器端口更改为系统中也可用的另一个端口。您会发现报告的错误代码相同。
  3. 以上是我的修复。它适用于我的机器。我希望它有所帮助!

答案 3 :(得分: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());

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

我有类似的问题。在我的情况下,该服务在开发人员计算机上可以正常工作,但在QA计算机上会失败。事实证明,在QA机器上,应用程序没有以管理员身份运行,也没有注册端点的权限:

  

HTTP无法注册网址http://+:12345/Foo.svc/]。你的过程呢   没有此命名空间的访问权限(请参阅   http://go.microsoft.com/fwlink/?LinkId=70353了解详情。

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

答案 6 :(得分:1)

如果您使用WCF风暴,您甚至可以登录到WCF服务端点吗?如果没有,并且您在Windows服务中托管它,您可能忘记注册该命名空间。这个步骤是必需的,并没有很好地宣传,这实际上很烦人。

我使用this tool to do this;它使所有繁琐的步骤自动化。

答案 7 :(得分:0)

检查网页文件Web.config中的端口号是否与IIS上托管的端口号相同。

答案 8 :(得分:0)

有了这个错误,我能够跟踪它,感谢@Yaur,您需要基本检查服务(WCF)是否正在运行,还要检查高级防火墙设置上的出站和入站TCP属性。

答案 9 :(得分:0)

我在我的网络服务器上遇到了同样的问题“无法建立连接,因为目标计算机主动拒绝了它161.x.x.235:5672”。我要求管理员在Web服务器上打开端口5672,然后它运行正常。

答案 10 :(得分:0)

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

内部异常:System.Net.Sockets.SocketException(0x80004005):无法建立连接,因为目标计算机在System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress)处主动拒绝它serviceIP:443 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure,Socket s4,Socket s6,Socket& socket,IPAddress& address,ConnectSocketState state,IAsyncResult asyncResult,Exception& exception)

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

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

答案 11 :(得分:0)

我也在C#中使用.Net Remoting Service遇到了问题。

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

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

答案 12 :(得分:0)

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

  

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

答案 13 :(得分:0)

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

答案 14 :(得分:0)

我无法重新启动IIexpress。这是对我有用的解决方案

  1. 清理了构建
  2. 重建

答案 15 :(得分:0)

就我而言,我有一个带有 ASP.NET CoreAngular SLA 项目模板。

我试图从 Visual Studio WebUI 解决方案运行 IIS Express,触发了“主动拒绝它”错误。

enter image description here


在本例中,问题与阻止连接的防火墙无关。

事实证明,我必须独立于 Kestrel 运行运行 Angular 服务器,因为服务器希望 UI 在特定端口上运行,但没有实际上。


有关详细信息,请查看官方 Microsoft documentation

答案 16 :(得分:0)

我遇到了类似的问题。在 launchSettings 中,我的 IIS Express 是在一个端口上配置的,还有另一个启动配置文件在另一个具有另一个端口的 ApplicationUrl 上启动。

使用 IIS Express 配置文件启动 Web 应用程序导致我出现错误。

答案 17 :(得分:-1)

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

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

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