我正在使用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)
答案 0 :(得分:127)
“主动拒绝它”意味着当您尝试连接时,主机发送了重置而不是确认。因此,您的代码不是问题。有防火墙阻止连接或托管服务的进程没有侦听该端口。这可能是因为它根本没有运行,或者因为它正在侦听不同的端口。
启动托管服务的流程后,请尝试netstat -anb
(需要管理员权限)来验证它是否正在运行并正在侦听预期的端口。
更新:在Linux上,您可能需要改为netstat -anp
。
答案 1 :(得分:11)
您无需重新启动PC。改为重新启动IIS。
运行 - > 'cmd'(作为管理员)并输入“iisreset”
答案 2 :(得分:2)
我收到类似 TCP错误代码10061的类似错误消息:由于目标计算机在我当前项目中主动拒绝,因此无法建立连接。我发现这个10061错误代码无法区分服务端点未启动的情况和防火墙阻止它的情况。通常,防火墙可以关闭,但问题仍然存在。
您可以通过以下两种方式测试您的代码。
以上是我的修复。它适用于我的机器。我希望它有所帮助!
答案 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个步骤解决了问题:
答案 12 :(得分:0)
我有一个类似的问题。以我为例,Psiphon phon等VPN代理应用更改了Windows中的代理设置,因此请遵循以下步骤:
在Windows 10中,在手动代理中搜索更改代理设置并启用代理服务器
答案 13 :(得分:0)
确保您的应用程序使用的所有服务都已打开,并且正在使用主机和端口来利用它们。例如,例如在我的情况下,如果您的应用程序使用Redis服务器并且无法在给定的端口和主机上与其连接,则可能会发生此错误。
答案 14 :(得分:0)
我无法重新启动IIexpress。这是对我有用的解决方案
答案 15 :(得分:0)
就我而言,我有一个带有 ASP.NET Core 的 Angular SLA 项目模板。
我试图从 Visual Studio WebUI 解决方案运行 IIS Express,触发了“主动拒绝它”错误。
在本例中,问题与阻止连接的防火墙无关。
事实证明,我必须独立于 Kestrel 运行运行 Angular 服务器,因为服务器希望 UI 在特定端口上运行,但没有实际上。
有关详细信息,请查看官方 Microsoft documentation。
答案 16 :(得分:0)
我遇到了类似的问题。在 launchSettings 中,我的 IIS Express 是在一个端口上配置的,还有另一个启动配置文件在另一个具有另一个端口的 ApplicationUrl 上启动。
使用 IIS Express 配置文件启动 Web 应用程序导致我出现错误。
答案 17 :(得分:-1)
简介: 测试我的拳头网络应用程序时遇到了此类问题。 我创建了:客户端和服务器,然后运行客户端,突然引发异常,的确阻止了连接,因为未监听端口!
错误: 服务器未关闭我的端口,因为服务器已关闭。
解决方案:首先运行服务器,以便服务器将侦听该端口,并且一旦客户端尝试连接服务器,它将处理该端口。