Win8(C#)中WebClient.DownloadStringAsync的奇怪行为

Win8(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();

我在Win8上运行程序时遇到了一个问题(在WinXP上运行正常)。如果有人能告诉我发生了什么,我将不胜感激。似乎在WinXP和Win8之间更改了一些网络设置

在这里,我制作了一些让我感到奇怪的示例代码:

HttpListener正在本地侦听端口20000

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,但仍然没有更改任何内容。