目标机器主动拒绝127.0.0.1:3446,因此无法build立连接
我正在使用WCF4.0模板 – REST 。 我试图做一个方法,上传一个文件使用stream。
问题总是发生在
Stream serverStream = request.GetRequestStream();
stream媒体类:
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项目:进行testing
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()); } }
我已closures防火墙和Internet连接,但错误仍然存在。 有没有更好的方法来testing上传方法?
堆栈跟踪:
在System.Net.ServicePoint.ConnectSocketInternal(布尔connectFailure,套接字s4,套接字s6,套接字和套接字,IP地址和地址,ConnectSocketState状态,IAsyncResult asyncResult,Int32超时,System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,SocketAddress套接字地址)例外与例外)
“主动拒绝”意味着主机在尝试连接时发送了重置而不是确认。 因此在你的代码中没有问题。 要么有阻止连接的防火墙,要么托pipe服务的进程不在该端口上侦听。 这可能是因为它根本没有运行,或者是因为它正在监听不同的端口。
一旦启动托pipe服务的进程,请尝试netstat -anb
(需要pipe理员权限)以validation它是否正在运行并正在侦听预期的端口。
更新:在Linux上,您可能需要执行netstat -anp
。
您不必重新启动电脑。 而是重新启动IIS。
运行 – >'cmd'(如admin)并input“iisreset”
检查是否有其他程序正在使用该端口。
如果同一程序的一个实例仍然处于活动状态,请杀死该进程。
我有一个类似的问题。 在我的情况下,服务在开发人员机器上工作正常,但在QA机器上失败。 事实certificate,在QA机器上,应用程序没有以pipe理员身份运行,也没有注册端点的权限:
HTTP无法注册URL http:// +:12345 / Foo.svc /] 。 您的进程无权访问此名称空间(有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=70353 )。
请参阅这里如何让它工作,而不是一个pipe理员用户: https : //stackoverflow.com/a/885765/38258
我得到了类似的错误消息,如TCP错误代码10061:无法build立连接,因为目前的计算机在我当前的项目中主动拒绝它 。 我发现这10061错误代码无法区分服务端点未启动的情况和被防火墙阻止的情况。 通常情况下,防火墙可以closures,但问题仍然存在。
你可以用以下两种方式testing你的代码。
- 插入代码以获取时间A服务已启动并且时间B客户端将请求发送到服务器。 如果B早于A,则可能导致此问题。
- 将您的服务器端口更改为系统中也可用的另一个端口。 你会发现相同的错误代码报告。
以上是我的修复。 它在我的机器上工作。 我希望它有帮助!
如果你使用WCF风暴,你甚至可以login到WCF服务端点吗? 如果没有,并且您将其托pipe在Windows服务中,则可能忘记注册该名称空间。 这不是很好的广告,这一步是必需的,这实际上是令人讨厌的。
我使用这个工具来做到这一点 ; 它使所有那些繁琐的步骤自动化。
检查网页文件Web.config中的端口号是否与IIS上承载的端口号相同。
有了这个错误,我可以跟踪它,感谢@Yaur,你需要基本上检查服务(WCF),如果它正在运行,并检查您的高级防火墙设置的出站和入站TCP属性。
我的networking服务器上有同样的问题“无法连接,因为目标机器主动拒绝它161.xx235:5672”。 我要求pipe理员打开Web服务器上的端口5672,然后工作正常。
我有一个类似的问题拒绝本地和127.0.0.1。 cmd(admin) netstat -anb
发现运行在169.254.80.80上的端口(不知道是从哪里来的,因为我的networkingip是10.0.0.5,把这个IPjoin后就工作了,这样给出正确的IP:
IPAddress ipAddress = ipHostInfo.AddressList[0]; Console.WriteLine(ipAddress.ToString());
有了类似的模式,我的其余客户端正在调用服务API,debugging时调用成功的服务,但不能在发布的代码上工作。 错误是:无法连接到远程服务器。
内部exception:System.Net.Sockets.SocketException(0x80004005):无法build立连接,因为目标机器主动拒绝它SystemIPNet上的System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress)serviceIP:443 .ServicePoint.ConnectSocketInternal(Boolean connectFailure,Socket s4,套接字s6,套接字和套接字,IP地址和地址,ConnectSocketState状态,IAsyncResult asyncResult,exception和exception)
解决方法:在Webconfiguration中设置代理。
<system.net> <defaultProxy useDefaultCredentials="true"> <proxy proxyaddress="http://proxy_ip:portno/" usesystemdefault="True"/> </defaultProxy> </system.net>