无法建立连接,因为目标计算机主动拒绝它127.0.0.1:3446
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法建立连接,因为目标计算机主动拒绝它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;
}
}
}
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());
}
}
我关闭了防火墙和我的Internet连接,但错误仍然存在。有没有更好的方法来测试上传方法?
堆栈跟踪:
System.Net.Socket.Net.Service.ConnectSocketInternal上的System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress)(布尔值connectFailure,套接字s4,套接字s6,套接字和套接字,IP地址和地址,ConnectSocketState状态,IAsyncResult asyncResult,Int32超时,异常和例外)
“主动拒绝它”意味着当您尝试连接时,主机发送了重置而不是确认。因此,您的代码不是问题。有防火墙阻止连接或托管服务的进程没有侦听该端口。这可能是因为它根本没有运行,或者因为它正在侦听不同的端口。
一旦启动托管服务的进程,请尝试使用netstat -anb
(需要管理员权限)来验证它是否正在运行并侦听预期的端口。
更新:在Linux上,您可能需要改为使用netstat -anp
。
有了这个错误,我能够跟踪它,感谢@Yaur,您需要基本检查服务(WCF)是否正在运行,还要检查高级防火墙设置上的出站和入站TCP属性。
我在我的网络服务器上遇到了同样的问题“无法建立连接,因为目标机器主动拒绝了它161.x.x.235:5672”。我要求管理员在Web服务器上打开端口5672,然后它运行正常。
使用类似的模式,我的rest客户端调用服务API,调试时调用的服务成功,但不处理已发布的代码。错误是:无法连接到远程服务器。
内部异常:System.Net.Sockets.SocketException(0x80004005):无法建立连接,因为目标计算机在System.Net上的System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress)主动拒绝了它的serviceIP:443 .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>
我也在C#中使用.Net Remoting Service遇到了问题。
我通过3个步骤解决了它:
- 在所有文件中更改协议端口,无论它在何处使用。
- 运行您的Host Server程序并使其处于活动状态。
- 现在运行您的客户端程序。
我有一个类似的问题。在我的案例VPN代理应用程序,如Psiphon,更改了Windows中的代理设置,请按照下列步骤操作:
在Windows 10中,搜索更改代理设置并在手动代理中使用代理服务器
确保您的应用程序使用的所有服务都已启用,这些服务正在使用主机和端口来使用它们。例如,在我的情况下,可能会出现此错误,如果您的应用程序正在使用Redis服务器并且无法在给定端口和主机上连接它,从而产生此错误。
您不必重新启动PC。改为重新启动IIS。
运行 - >'cmd'(作为管理员)并输入“iisreset”
我得到类似的错误消息,如TCP错误代码10061:无法建立连接,因为目标计算机在我当前的项目中主动拒绝它。我发现这个10061错误代码无法区分服务端点未启动的情况和防火墙阻止它的情况。通常,防火墙可以关闭,但问题仍然存在。
您可以通过以下两种方式测试代码。
- 插入代码以获取时间A服务启动以及客户端将请求发送到服务器的时间B.如果B早于A,则可能导致此问题。
- 将服务器端口更改为系统中也可用的另一个端口。您会发现报告的错误代码相同。
以上是我的修复。它适用于我的机器。我希望它有所帮助!
检查是否有其他程序正在使用该端口。
如果同一程序的实例仍处于活动状态,则终止该进程。
我有一个类似的问题。在我的情况下,该服务在开发人员计算机上可以正常工作,但在QA计算机上会失败。事实证明,在QA机器上,应用程序没有以管理员身份运行,也没有注册端点的权限:
HTTP无法注册URL http://+:12345/Foo.svc/]。您的进程没有此命名空间的访问权限(有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=70353)。
请参考此处了解如何在不成为管理员用户的情况下使其工作:https://stackoverflow.com/a/885765/38258
如果您使用WCF风暴,您甚至可以登录到WCF服务端点吗?如果没有,并且您在Windows服务中托管它,您可能忘记注册该命名空间。这个步骤是必需的,并没有很好地宣传,这实际上很烦人。
我用this tool to do this;它可以自动完成所有繁琐的步骤。
我有一个类似的问题拒绝localhost和127.0.0.1。 cmd(admin)netstat -anb
发现端口运行在169.254.80.80(不知道是因为我的网络ip是10.0.0.5而来的,因为我的网络ip是10.0.0.5。放入这个IP后它工作了。这给了正确的IP:
IPAddress ipAddress = ipHostInfo.AddressList[0];
Console.WriteLine(ipAddress.ToString());
您必须设置您的系统代理您必须通过此路径控制面板>> Internet选项>>连接>> LAN设置>>代理无tik:使用代理服务器
检查网页文件Web.config中的端口号是否与IIS上托管的端口号相同。
以上是关于无法建立连接,因为目标计算机主动拒绝它127.0.0.1:3446的主要内容,如果未能解决你的问题,请参考以下文章
无法建立连接,因为目标机器主动拒绝它 127.0.0.1:3446
TCP错误代码10061:无法建立连接,因为目标机器主动拒绝它 127.0.0.1:8732
无法从 Excel 连接到远程 OLAP (SSAS) “无法建立连接,因为目标计算机主动拒绝它”