Win8(C#)中WebClient.DownloadStringAsync的奇怪行为
我在Win8上运行程序时遇到了一个问题(在WinXP上运行正常)。如果有人能告诉我发生了什么,我将不胜感激。似乎在WinXP和Win8之间更改了一些网络设置 在这里,我制作了一些让我感到奇怪的示例代码: HttpListener正在本地侦听端口20000Win8(C#)中WebClient.DownloadStringAsync的奇怪行为,c#,windows,webclient,C#,Windows,Webclient,我在Win8上运行程序时遇到了一个问题(在WinXP上运行正常)。如果有人能告诉我发生了什么,我将不胜感激。似乎在WinXP和Win8之间更改了一些网络设置 在这里,我制作了一些让我感到奇怪的示例代码: HttpListener正在本地侦听端口20000 static void Main(string[] args) { // Create listener HttpListener listener = new HttpListener();
static void Main(string[] args)
{
// Create listener
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://127.0.0.1:20000/");
listener.Start();
Console.WriteLine("Listening...");
// Wait for request
HttpListenerContext context = listener.GetContext();
HttpListenerResponse response = context.Response;
// Create response
string responseString = GenerateString();
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
response.ContentLength64 = buffer.Length;
// Send response
System.IO.Stream output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
listener.Stop();
Console.ReadLine();
}
private static string GenerateString()
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 6000000; i++)
{
sb.Append("A");
}
return sb.ToString();
}
static void Main(string[] args)
{
WebClient c = new WebClient();
//c.Proxy = null;
try
{
Console.WriteLine("Start downloading: {0}", DateTime.Now.ToString("hh:mm:ss.fff"));
c.DownloadStringCompleted += (s,a) => OnDownloadStringCompleted(s,a);
c.DownloadStringAsync(new Uri("http://127.0.0.1:20000"), c);
//c.DownloadString(new Uri("http://127.0.0.1:20000"));
//Console.WriteLine("Finish downloading: {0}", DateTime.Now.ToString("hh:mm:ss.fff"));
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
Console.ReadLine();
c.Dispose();
}
private static void OnDownloadStringCompleted(object s, DownloadStringCompletedEventArgs arg)
{
try
{
string response = arg.Result;
Console.WriteLine("Finish downloading: {0}", DateTime.Now.ToString("hh:mm:ss.fff"));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
如果我在我的XP机器上运行它,它可以正常工作(WebClient异步下载字符串)。如果我在Win8机器上运行它(我用Win8和Win8.1尝试了两台机器),那么它取决于我传递给HttpListenerResponse.OutputStream的字符串的大小——比如,对于100000个字符的小响应字符串,它可以正常工作,但对于6000000个字符,它有时只工作,有时会抛出错误:或者“远程主机已强制关闭现有连接”或“由于目标计算机主动拒绝,无法建立连接127.0.0.1:20000”
另一件奇怪的事情是,sync DownloadString(在这里注释)在Win8上似乎工作得很好
事实上,这太奇怪了,我有点迷路了。我不知道为什么它有时会工作,但似乎它在我构建它之后第一次工作,然后就停止了工作
到目前为止我已经尝试过的事情:
1.禁用Windows防火墙-没有帮助
2.使用localhost127.0.0.1(Win8似乎改变了有关DNS的策略,因此localhost在不更改主机的情况下可能工作得较慢或不工作)。127.0.0.1和localhost都以这种奇怪的方式工作。
3.从管理员和用户处运行代码-也没有帮助
有人经历过这件事吗?或者你有什么线索吗?哦,忘了提一下:我使用的两个系统都安装了.NET 4.0。另外,我尝试将WebClient的代理属性更改为null或WebRequest.DefaultWebProxy,但仍然没有更改任何内容。