WebClient能够执行多个请求

时间:2014-02-25 18:54:00

标签: c# multithreading session ssl webclient

我正在向使用SSL证书的网站发出请求。因此,如果我这样做:

            var webClient = new WebClient();
            webClient.DownloadData("https://link1");  // 1
            webClient.DownloadData("https://link2");  // 2

在这两种情况下,我都在交换公钥和私钥,因为webclient没有保存会话权限?

然后我相信我需要一个能够识别cookie的WebClient类。所以我用Google搜索了一下,然后我想出了:https://stackoverflow.com/a/11523836/637142

如果我使用该课程并执行:

            var webClient2 = new WebClientEx(); // this class is on the link
            webClient2.DownloadData("https://link1"); // 1
            webClient2.DownloadData("https://link2"); // 2

现在我不需要第二次交换公钥和私钥吗?

无论如何,现在我的问题是我需要能够做到:

            var webClient2 = new WebClientEx(); // this class is on the link
            Task.Fatory.StartNew(()=>
                webClient2.DownloadData("https://link1"); // 1
            );
            Task.Fatory.StartNew(()=>
                webClient2.DownloadData("https://link2"); // 2
            );

因为WebClient只能一次下载数据而引发异常。结果我做了:

            Task.Fatory.StartNew(()=>
                new WebClient().DownloadData("https://link1"); // 1
            );
            Task.Fatory.StartNew(()=>
                new WebClient().DownloadData("https://link2"); // 2
            );

虽然有效,但效率不高,因为每次请求我都会交换公钥和私钥

PS: 注意我对SSL知之甚少,因此如果我假设出错了,请纠正我。也许SSL不使用会话来维护对称密钥。换句话说,我不明白为什么只有Web浏览器中的第一个请求才需要很长时间。第一次请求后,一切都很快。我假设对称密钥存储在会话中。

1 个答案:

答案 0 :(得分:0)

如果你想使用相同的会话,你可以使用cookiecontainer,你可以使用新的WebclienEx(CookieContainer),每个webclient实例使用相同的cookiecontainer来使用相同的会话。