Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit b0900bb

Browse files
authored
Change XmlDownloadManager back to use WebRequest (#19812)
* Change XmlDownloadManager back to use WebRequest * Simplify XmlDownloadManager * Make a copy of the response stream in XmlDownloadManager
1 parent 6c7f3ac commit b0900bb

File tree

5 files changed

+42
-62
lines changed

5 files changed

+42
-62
lines changed

src/System.Private.Xml/src/System.Private.Xml.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,7 @@
512512
<Reference Include="System.IO.FileSystem" />
513513
<Reference Include="System.Linq" />
514514
<Reference Include="System.Net.Http" />
515+
<Reference Include="System.Net.Requests" />
515516
<Reference Include="System.Net.Primitives" />
516517
<Reference Include="System.ObjectModel" />
517518
<Reference Include="System.Reflection.Emit" />

src/System.Private.Xml/src/System/Xml/XmlDownloadManager.cs

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ namespace System.Xml
1818
//
1919
internal partial class XmlDownloadManager
2020
{
21-
private Hashtable _connections;
22-
2321
internal Stream GetStream(Uri uri, ICredentials credentials, IWebProxy proxy,
2422
RequestCachePolicy cachePolicy)
2523
{
@@ -36,22 +34,28 @@ internal Stream GetStream(Uri uri, ICredentials credentials, IWebProxy proxy,
3634
private Stream GetNonFileStream(Uri uri, ICredentials credentials, IWebProxy proxy,
3735
RequestCachePolicy cachePolicy)
3836
{
39-
HttpClient client = new HttpClient();
40-
HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Get, uri);
41-
42-
lock (this)
37+
WebRequest req = WebRequest.Create(uri);
38+
if (credentials != null)
4339
{
44-
if (_connections == null)
45-
{
46-
_connections = new Hashtable();
47-
}
40+
req.Credentials = credentials;
41+
}
42+
if (proxy != null)
43+
{
44+
req.Proxy = proxy;
45+
}
46+
if (cachePolicy != null)
47+
{
48+
req.CachePolicy = cachePolicy;
4849
}
4950

50-
HttpResponseMessage resp = client.SendAsync(req).GetAwaiter().GetResult();
51-
52-
Stream respStream = new MemoryStream();
53-
resp.Content.CopyToAsync(respStream);
54-
return respStream;
51+
using (WebResponse resp = req.GetResponse())
52+
using (Stream respStream = resp.GetResponseStream())
53+
{
54+
var result = new MemoryStream();
55+
respStream.CopyTo(result);
56+
result.Position = 0;
57+
return result;
58+
}
5559
}
5660
}
5761
}

src/System.Private.Xml/src/System/Xml/XmlDownloadManagerAsync.cs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,28 @@ internal Task<Stream> GetStreamAsync(Uri uri, ICredentials credentials, IWebProx
3434
private async Task<Stream> GetNonFileStreamAsync(Uri uri, ICredentials credentials, IWebProxy proxy,
3535
RequestCachePolicy cachePolicy)
3636
{
37-
HttpClient client = new HttpClient();
38-
HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Get, uri);
39-
40-
lock (this)
37+
WebRequest req = WebRequest.Create(uri);
38+
if (credentials != null)
4139
{
42-
if (_connections == null)
43-
{
44-
_connections = new Hashtable();
45-
}
40+
req.Credentials = credentials;
41+
}
42+
if (proxy != null)
43+
{
44+
req.Proxy = proxy;
45+
}
46+
if (cachePolicy != null)
47+
{
48+
req.CachePolicy = cachePolicy;
4649
}
4750

48-
HttpResponseMessage resp = await client.SendAsync(req).ConfigureAwait(false);
49-
50-
Stream respStream = new MemoryStream();
51-
await resp.Content.CopyToAsync(respStream);
52-
return respStream;
51+
using (WebResponse resp = await req.GetResponseAsync().ConfigureAwait(false))
52+
using (Stream respStream = resp.GetResponseStream())
53+
{
54+
var result = new MemoryStream();
55+
await respStream.CopyToAsync(result).ConfigureAwait(false);
56+
result.Position = 0;
57+
return result;
58+
}
5359
}
5460
}
5561
}

src/System.Private.Xml/tests/XmlReader/Tests/AsyncReaderLateInitTests.cs

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -67,19 +67,8 @@ public static void ReadAfterInitializationWithTextReaderOnAsyncReaderDoesNotThro
6767
}
6868

6969
[Fact]
70-
[SkipOnTargetFramework(TargetFrameworkMonikers.Uap | //[ActiveIssue(13121)] // Path cannot be resolved in UWP
71-
TargetFrameworkMonikers.NetFramework)] //[ActiveIssue(19806)] // Full framework uses WebRequest instead of HttpRequest
70+
[SkipOnTargetFramework(TargetFrameworkMonikers.Uap)] //[ActiveIssue(13121)] // Path cannot be resolved in UWP
7271
public static void ReadAsyncAfterInitializationWithUriThrows()
73-
{
74-
using (XmlReader reader = XmlReader.Create("http://test.test/test.html", new XmlReaderSettings() { Async = true }))
75-
{
76-
Assert.Throws<System.Net.Http.HttpRequestException>(() => reader.ReadAsync().GetAwaiter().GetResult());
77-
}
78-
}
79-
80-
[Fact]
81-
[SkipOnTargetFramework(~TargetFrameworkMonikers.NetFramework)] // Full framework uses WebRequest instead of HttpRequest
82-
public static void ReadAsyncAfterInitializationWithUriThrows_FullFramework()
8372
{
8473
using (XmlReader reader = XmlReader.Create("http://test.test/test.html", new XmlReaderSettings() { Async = true }))
8574
{
@@ -88,20 +77,8 @@ public static void ReadAsyncAfterInitializationWithUriThrows_FullFramework()
8877
}
8978

9079
[Fact]
91-
[SkipOnTargetFramework(TargetFrameworkMonikers.Uap | //[ActiveIssue(13121)] // Path cannot be resolved in UWP
92-
TargetFrameworkMonikers.NetFramework)] //[ActiveIssue(19806)] // Full framework uses WebRequest instead of HttpRequest
80+
[SkipOnTargetFramework(TargetFrameworkMonikers.Uap)] //[ActiveIssue(13121)] // Path cannot be resolved in UWP
9381
public static void ReadAfterInitializationWithUriOnAsyncReaderTrows()
94-
{
95-
using (XmlReader reader = XmlReader.Create("http://test.test/test.html", new XmlReaderSettings() { Async = true }))
96-
{
97-
AggregateException ae = Assert.Throws<System.AggregateException>(() => reader.Read());
98-
Assert.Equal(typeof(System.Net.Http.HttpRequestException), ae.InnerException.GetType());
99-
}
100-
}
101-
102-
[Fact]
103-
[SkipOnTargetFramework(~TargetFrameworkMonikers.NetFramework)] // Full framework uses WebRequest instead of HttpRequest
104-
public static void ReadAfterInitializationWithUriOnAsyncReaderTrows_FullFramework()
10582
{
10683
using (XmlReader reader = XmlReader.Create("http://test.test/test.html", new XmlReaderSettings() { Async = true }))
10784
{

src/System.Private.Xml/tests/XmlReader/XmlResolver/XmlSystemPathResolverTests.cs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -86,16 +86,8 @@ public static void TestResolveInvalidPaths()
8686
}
8787

8888
[Fact]
89-
[SkipOnTargetFramework(TargetFrameworkMonikers.Uap | //[ActiveIssue(13121)] // Access to path is denied in UWP
90-
TargetFrameworkMonikers.NetFramework)] //[ActiveIssue(19806)] // Full framework uses WebRequest instead of HttpRequest
89+
[SkipOnTargetFramework(TargetFrameworkMonikers.Uap)] //[ActiveIssue(13121)] // Access to path is denied in UWP
9190
public static void TestResolveInvalidPath()
92-
{
93-
Assert.Throws<System.ArgumentException>(() => XmlReader.Create("ftp://www.bing.com")); // Only 'http' and 'https' schemes are allowed.
94-
}
95-
96-
[Fact]
97-
[SkipOnTargetFramework(~TargetFrameworkMonikers.NetFramework)] // Full framework uses WebRequest instead of HttpRequest
98-
public static void TestResolveInvalidPath_FullFramework()
9991
{
10092
Assert.Throws<System.Net.WebException>(() => XmlReader.Create("ftp://www.bing.com"));
10193
}

0 commit comments

Comments
 (0)