HttpClient.SendAsync 在 Xamarin.Forms Android 上抛出 ObjectDisposedException 但在 UWP 上没有
HttpClient.SendAsync throws ObjectDisposedException on Xamarin.Forms Android but not on UWP
我正在编写一个 Xamarin.Forms 应用程序,我正在尝试使用一些 JSON 有效负载对我的网络服务器执行 Post。
这在 UWP 中工作正常,但在 Android 上我收到以下错误:
System.ObjectDisposedException: Can not access a closed Stream.
at System.IO.StreamHelpers.ValidateCopyToArgs (System.IO.Stream source, System.IO.Stream destination, System.Int32 bufferSize) [0x0003a] in <19853c43ab794d18ab1a33ecb65b3c4d>:0
at System.IO.MemoryStream.CopyToAsync (System.IO.Stream destination, System.Int32 bufferSize, System.Threading.CancellationToken cancellationToken) [0x00000] in <19853c43ab794d18ab1a33ecb65b3c4d>:0
at Xamarin.Android.Net.AndroidClientHandler.WriteRequestContentToOutput (System.Net.Http.HttpRequestMessage request, Java.Net.HttpURLConnection httpConnection, System.Threading.CancellationToken cancellationToken) [0x0009a] in <2bd1b8f6e97f44bbb32ce356b78d4ce6>:0
at Xamarin.Android.Net.AndroidClientHandler.DoProcessRequest (System.Net.Http.HttpRequestMessage request, Java.Net.URL javaUrl, Java.Net.HttpURLConnection httpConnection, System.Threading.CancellationToken cancellationToken, Xamarin.Android.Net.AndroidClientHandler+RequestRedirectionState redirectState) [0x002f4] in <2bd1b8f6e97f44bbb32ce356b78d4ce6>:0
at Xamarin.Android.Net.AndroidClientHandler.SendAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x002cf] in <2bd1b8f6e97f44bbb32ce356b78d4ce6>:0
at System.Net.Http.HttpClient.FinishSendAsyncBuffered (System.Threading.Tasks.Task`1[TResult] sendTask, System.Net.Http.HttpRequestMessage request, System.Threading.CancellationTokenSource cts, System.Boolean disposeCts) [0x0017e] in <c85119bf7e3e421490ae6b5487992fff>:0
at BB.App.Services.WebserviceHelper.PostToWebservice[T] (System.String url, System.String json) [0x0008d] in C:\_Sources\_BB\BB.App\BB.App\Services\WebserviceHelper.cs:74
执行以下代码时会发生这种情况:
await httpClient.SendAsync(httpRequest);
我发现 建议不要将 HttpClient 的创建放在 using 语句中,我对此进行了更改,但没有解决我的问题。
我还发现 this bug 应该在去年修复。老实说,这听起来像是最有可能的候选者,但我不知道要更新什么才能在我的电脑上修复这个问题。我已经更新了我的解决方案中的所有 xamarin.android.x 引用,但到目前为止运气不好。
所以总而言之,解决我的问题的是
- 转到 android 项目的属性,
- 选择 'android options' 选项卡,
- 单击 'advanced'
- 将 'httpclient implementation' 从 'Android' 设置为 'Managed'
我正在编写一个 Xamarin.Forms 应用程序,我正在尝试使用一些 JSON 有效负载对我的网络服务器执行 Post。
这在 UWP 中工作正常,但在 Android 上我收到以下错误:
System.ObjectDisposedException: Can not access a closed Stream.
at System.IO.StreamHelpers.ValidateCopyToArgs (System.IO.Stream source, System.IO.Stream destination, System.Int32 bufferSize) [0x0003a] in <19853c43ab794d18ab1a33ecb65b3c4d>:0
at System.IO.MemoryStream.CopyToAsync (System.IO.Stream destination, System.Int32 bufferSize, System.Threading.CancellationToken cancellationToken) [0x00000] in <19853c43ab794d18ab1a33ecb65b3c4d>:0
at Xamarin.Android.Net.AndroidClientHandler.WriteRequestContentToOutput (System.Net.Http.HttpRequestMessage request, Java.Net.HttpURLConnection httpConnection, System.Threading.CancellationToken cancellationToken) [0x0009a] in <2bd1b8f6e97f44bbb32ce356b78d4ce6>:0
at Xamarin.Android.Net.AndroidClientHandler.DoProcessRequest (System.Net.Http.HttpRequestMessage request, Java.Net.URL javaUrl, Java.Net.HttpURLConnection httpConnection, System.Threading.CancellationToken cancellationToken, Xamarin.Android.Net.AndroidClientHandler+RequestRedirectionState redirectState) [0x002f4] in <2bd1b8f6e97f44bbb32ce356b78d4ce6>:0
at Xamarin.Android.Net.AndroidClientHandler.SendAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x002cf] in <2bd1b8f6e97f44bbb32ce356b78d4ce6>:0
at System.Net.Http.HttpClient.FinishSendAsyncBuffered (System.Threading.Tasks.Task`1[TResult] sendTask, System.Net.Http.HttpRequestMessage request, System.Threading.CancellationTokenSource cts, System.Boolean disposeCts) [0x0017e] in <c85119bf7e3e421490ae6b5487992fff>:0
at BB.App.Services.WebserviceHelper.PostToWebservice[T] (System.String url, System.String json) [0x0008d] in C:\_Sources\_BB\BB.App\BB.App\Services\WebserviceHelper.cs:74
执行以下代码时会发生这种情况:
await httpClient.SendAsync(httpRequest);
我发现
我还发现 this bug 应该在去年修复。老实说,这听起来像是最有可能的候选者,但我不知道要更新什么才能在我的电脑上修复这个问题。我已经更新了我的解决方案中的所有 xamarin.android.x 引用,但到目前为止运气不好。
所以总而言之,解决我的问题的是
- 转到 android 项目的属性,
- 选择 'android options' 选项卡,
- 单击 'advanced'
- 将 'httpclient implementation' 从 'Android' 设置为 'Managed'