首页 > 解决方案 > 在 Xamarin Forms 项目中升级 nuget 后的 Android 网络问题

问题描述

我有一个旧的 Xamarin Forms 项目。经过几个月的不活动后,我必须对其进行一些更改。

首先,我已经更新了 nuget,但我无法前进:我在 nuget 更新后对其进行了测试,在 IOS 上它像之前一样工作,但在 Android 上所有 http 请求都停止工作。我总是立即返回“任务已取消”异常(问题与时间无关,我在发送请求时立即得到它)。

我环顾了网络,但没有得到有关这种奇怪行为的信息。

这是我用来发出 http 请求的简单代码:

private string FetchData(string requestURL)
        {
            var httpHandler = new HttpClientHandler
            {
                UseDefaultCredentials = false,
                Credentials = _credential
            };

            using (var httpClient = new HttpClient(httpHandler, false))
            {
                var response = httpClient.GetStringAsync(requestURL).Result;
                return response;
            }
        }

调用堆栈:

[0:] Fail: A task was canceled.
[0:]   at System.Diagnostics.DefaultTraceListener.Fail (System.String message, System.String detailMessage) [0x00000] in <ca7419b40e504a6dbe088f6fe95d09aa>:0 
  at System.Diagnostics.TraceListener.Fail (System.String message) [0x00000] in <ca7419b40e504a6dbe088f6fe95d09aa>:0 
  at System.Diagnostics.DefaultTraceListener.Fail (System.String message) [0x00000] in <ca7419b40e504a6dbe088f6fe95d09aa>:0 
  at System.Diagnostics.TraceInternal.Fail (System.String message) [0x00000] in <ca7419b40e504a6dbe088f6fe95d09aa>:0 
  at System.Diagnostics.TraceInternal.Assert (System.Boolean condition, System.String message) [0x00000] in <ca7419b40e504a6dbe088f6fe95d09aa>:0 
  at System.Diagnostics.Debug.Assert (System.Boolean condition, System.String message) [0x00000] in <ca7419b40e504a6dbe088f6fe95d09aa>:0 
  at projectx_Plus.Pages.LoginPage.<.ctor>b__3_0 (System.Object sender, System.EventArgs e) [0x00a9f] in <f1910371c2b04847a4cb7bfe1ad97f28>:0 
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.InvokeMoveNext (System.Object stateMachine) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run () [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at System.Threading.Tasks.AwaitTaskContinuation.InvokeAction (System.Object state) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at System.Threading.Tasks.AwaitTaskContinuation.RunCallback (System.Threading.ContextCallback callback, System.Object state, System.Threading.Tasks.Task& currentTask) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation.Run (System.Threading.Tasks.Task ignored, System.Boolean canInlineContinuationTask) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at System.Threading.Tasks.Task.FinishContinuations () [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at System.Threading.Tasks.Task.FinishStageThree () [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at System.Threading.Tasks.Task.CancellationCleanupLogic () [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at System.Threading.Tasks.Task.TrySetCanceled (System.Threading.CancellationToken tokenToRecord, System.Object cancellationException) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[TResult].SetException (System.Exception exception) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at projectx_Plus.API.DataFetcher.AuthenticateUserAsync () [0x000db] in <f1910371c2b04847a4cb7bfe1ad97f28>:0 
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.InvokeMoveNext (System.Object stateMachine) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run () [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation+<>c.<.cctor>b__7_0 (System.Object state) [0x00000] in <ff07eae8184a40a08e79049bbcb31a0e>:0 
  at Android.App.SyncContext+<>c__DisplayClass2_0.<Post>b__0 () [0x00000] in <3324153164274220ab14392825330ba2>:0 
  at Java.Lang.Thread+RunnableImplementor.Run () [0x00000] in <3324153164274220ab14392825330ba2>:0 
  at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00000] in <3324153164274220ab14392825330ba2>:0 
  at Android.Runtime.DynamicMethodNameCounter.49 (System.IntPtr , System.IntPtr ) [0x00000] in <3324153164274220ab14392825330ba2>:0 

我在 Visual Studio 的应用程序启动时注意到输出窗口中有一些奇怪的条目,这些条目似乎与此问题有关:

09-11 13:41:43.216 D/Mono    (18770): Loading reference 8 of netstandard.dll asmctx DEFAULT, looking for System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
09-11 13:41:43.219 D/Mono    (18770): Image addref System.Net.Http[0x7cbab75c80] (asmctx DEFAULT) -> System.Net.Http.dll[0x7cbab74800]: 2
09-11 13:41:43.219 D/Mono    (18770): Prepared to set up assembly 'System.Net.Http' (System.Net.Http.dll)
09-11 13:41:43.219 D/Mono    (18770): Assembly System.Net.Http[0x7cbab75c80] added to domain RootDomain, ref_count=1
09-11 13:41:43.220 D/Mono    (18770): AOT: image 'System.Net.Http.dll.so' not found: (null)
09-11 13:41:43.220 D/Mono    (18770): AOT: image '/Users/builder/jenkins/workspace/archive-mono/2019-02/android/release/sdks/out/android-arm64-v8a-release/lib/mono/aot-cache/arm64/System.Net.Http.dll.so' not found: (null)
09-11 13:41:43.220 D/Mono    (18770): Config attempting to parse: 'System.Net.Http.dll.config'.
09-11 13:41:43.220 D/Mono    (18770): Config attempting to parse: '/Users/builder/jenkins/workspace/archive-mono/2019-02/android/release/sdks/out/android-arm64-v8a-release/etc/mono/assemblies/System.Net.Http/System.Net.Http.config'.
09-11 13:41:43.220 D/Mono    (18770): Assembly Ref addref netstandard[0x7cbeb84400] -> System.Net.Http[0x7cbab75c80]: 2
09-11 13:41:43.220 D/Mono    (18770): Loading reference 0 of System.Net.Http.dll asmctx DEFAULT, looking for mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e
09-11 13:41:43.220 D/Mono    (18770): Assembly Ref addref System.Net.Http[0x7cbab75c80] -> mscorlib[0x7ccfdfdf00]: 118
Loaded assembly: System.Net.Http.dll [External]

以下是我在项目中使用的 nuget 包:

<PackageReference Include="Acr.UserDialogs">
      <Version>7.0.4</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.AppCenter.Analytics">
      <Version>2.1.1</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.AppCenter.Crashes">
      <Version>2.1.1</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.Bcl.Build">
      <Version>1.0.21</Version>
    </PackageReference>
    <PackageReference Include="Naxam.Mapbox.Droid">
      <Version>8.3.0</Version>
    </PackageReference>
    <PackageReference Include="Naxam.Mapbox.Droid.Custom">
      <Version>6.4.2</Version>
    </PackageReference>
    <PackageReference Include="Naxam.MapboxAnnotation.Droid">
      <Version>0.7.0</Version>
    </PackageReference>
    <PackageReference Include="Naxam.MapboxGestures.Droid">
      <Version>0.5.1</Version>
    </PackageReference>
    <PackageReference Include="Naxam.MapboxSdkCore.Droid">
      <Version>3.4.0</Version>
    </PackageReference>
    <PackageReference Include="Naxam.MapboxSdkGeojson.Droid">
      <Version>4.8.0.1</Version>
    </PackageReference>
    <PackageReference Include="Naxam.MapboxSdkServices.Droid">
      <Version>3.4.0</Version>
    </PackageReference>
    <PackageReference Include="NControl.Controls">
      <Version>0.9.4.1</Version>
    </PackageReference>
    <PackageReference Include="NGraphics">
      <Version>0.5.0</Version>
    </PackageReference>
    <PackageReference Include="Plugin.Share">
      <Version>7.1.1</Version>
    </PackageReference>
    <PackageReference Include="Syncfusion.Xamarin.Expander">
      <Version>17.2.0.51</Version>
    </PackageReference>
    <PackageReference Include="Syncfusion.Xamarin.SfAutoComplete">
      <Version>17.2.0.51</Version>
    </PackageReference>
    <PackageReference Include="Syncfusion.Xamarin.SfChart">
      <Version>17.2.0.51</Version>
    </PackageReference>
    <PackageReference Include="Syncfusion.Xamarin.SfComboBox">
      <Version>17.2.0.51</Version>
    </PackageReference>
    <PackageReference Include="Syncfusion.Xamarin.SfListView">
      <Version>17.2.0.51</Version>
    </PackageReference>
    <PackageReference Include="Syncfusion.Xamarin.SfSparkline">
      <Version>17.2.0.51</Version>
    </PackageReference>
    <PackageReference Include="Xam.Plugin.DeviceInfo">
      <Version>4.1.1</Version>
    </PackageReference>
    <PackageReference Include="Xam.Plugin.ExternalMaps">
      <Version>4.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xam.Plugins.Messaging">
      <Version>5.2.0</Version>
    </PackageReference>
    <PackageReference Include="Xam.Plugins.Settings">
      <Version>3.1.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Arch.Core.Common">
      <Version>1.1.1.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Arch.Core.Runtime">
      <Version>1.1.1.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Arch.Lifecycle.Common">
      <Version>1.1.1.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Arch.Lifecycle.Extensions">
      <Version>1.1.1.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Arch.Lifecycle.Runtime">
      <Version>1.1.1.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.Animated.Vector.Drawable">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.Annotations">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.Compat">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.Core.UI">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.Core.Utils">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.CustomTabs">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.Design">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.Fragment">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.Media.Compat">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.Transition">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.v4">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.v7.AppCompat">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.v7.CardView">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.v7.MediaRouter">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.v7.Palette">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.v7.RecyclerView">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Android.Support.Vector.Drawable">
      <Version>28.0.0.1</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Build.Download">
      <Version>0.4.11</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Firebase.Common">
      <Version>71.1610.0</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Firebase.Iid">
      <Version>71.1710.0</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Firebase.Messaging">
      <Version>71.1740.0</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Forms">
      <Version>4.2.0.709249</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Forms.Maps">
      <Version>4.2.0.709249</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Forms.Visual.Material">
      <Version>4.2.0.709249</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.GooglePlayServices.Base">
      <Version>71.1610.0</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.GooglePlayServices.Basement">
      <Version>71.1620.0</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.GooglePlayServices.Location">
      <Version>71.1600.0</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.GooglePlayServices.Maps">
      <Version>71.1610.0</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.GooglePlayServices.Tasks">
      <Version>71.1601.0</Version>
    </PackageReference>

项目的最低Android版本为5.0,目标版本为9.0。HTTP 客户端实现设置为默认值,SSL/TLS 实现也是默认值(本机 TLS 1.2+)

我在真机上测试过,wifi连接没问题,我发送HTTP请求的服务器也没问题,我什至可以从同一设备上的网络浏览器与它通信。

请问有人有什么建议吗?非常感谢!

标签: androidformshttpxamarin

解决方案


Xamarin.Forms 对 没有影响HttpClient,它们仅对用户界面有影响。

您应该进一步考虑以了解您还更改了哪些内容,并在发现时提出新问题。


推荐阅读