将后端服务器和应用程序迁移到 .NET Core 3.1 signalR 后,SignalR 在 Xamarin.Forms Android 应用程序中停止工作
SignalR stops working in Xamarin.Forms Android app after migration of backend server and app to .NET Core 3.1 signalR
我正在努力将我的网站从 ASP.NET Framework 迁移到 ASP.NET Core,并且在更新我的 Xamarin Forms 应用程序以连接迁移后的 signalR 的最后一步中遇到了问题后端。我迁移了我的应用程序,在调试配置中通过 USB 在模拟器和我的物理设备 (LG V50 THINQ) 上一切正常,所以我将我的发布配置 APK 部署到 Google Play。但是,当我从 Google Play 商店将应用程序安装到同一物理设备上时,signalR 停止工作。
首先,后端似乎没有问题。我没有完全排除它,但到目前为止我所记录的内容并未指出后端问题。另外,请注意,我目前在我的应用程序中设置为为每个选定的 ABI 生成一个包 (.apk)。到目前为止,我上传到 Play 商店的架构是 armeabi-v7a 和 arm64-v8a。
为了追踪这个问题,我采取了以下步骤:
- 运行 我在模拟器上的发布配置 - 有效
- 运行 我通过 USB 在设备上从 VS 2019 发布的配置 - 失败 - 设备日志显示对 signalR 集线器的出站调用和 signalR 集线器显示一切连接正常并尝试按预期调用设备客户端,但设备日志没有显示来自 signalR 集线器的入站调用成功。
- 切换发布配置中的设置以使其与调试配置保持一致,直到我发现在 Android 选项面板中切换以下设置允许应用程序接收来自 signalR 集线器的回调以工作:
<DebugSymbols>true</DebugSymbols>
<Optimize>false</Optimize>
- 然后我尝试将 APK 上传到 Google 设置这些选项并从 Google Play 部署到设备 - 失败
- 此时,我后退了一步,将 armeabi-v7a 的签名 APK 直接复制到 V50(我上传到 Play 商店的同一个 APK)并手动安装了 APK - 成功了
- 我卸载了armeabi-v7a APK,然后直接将arm64-v8a的签名APK复制并手动安装到V50 - 失败
- 我将发布配置设置恢复为默认设置,构建并签署了新的 APK,发现即使在原始的默认发布配置下,armeabi-v7a 工作正常,arm64-v8a 失败。
所以,我知道两件事:
- 在 V50 设备上,32 位 armeabi-v7a 32 位 APK 适用于 signalR,而 64 位 arm64-v8a APK 在默认发布配置设置下不适用于 signalR(但我仍然不知道为什么)。
- 如果我如上所示更新这两项的发布配置设置(并且两者都是必需的),我可以在 V50 运行 上直接从 VS 2019 调试发布配置,但这些设置不会部署为签名 APK 后更改行为。
在这一点上,我被难住了。感觉像是 64 位与 32 位的问题,但没有任何面包屑指向我下一步应该看的地方。任何人有任何线索供我追踪?
好的,终于找到了明显的罪魁祸首。不得不禁用“使用 LLVM 优化编译器”,signalR 开始使用 arm64-v8a。
我正在努力将我的网站从 ASP.NET Framework 迁移到 ASP.NET Core,并且在更新我的 Xamarin Forms 应用程序以连接迁移后的 signalR 的最后一步中遇到了问题后端。我迁移了我的应用程序,在调试配置中通过 USB 在模拟器和我的物理设备 (LG V50 THINQ) 上一切正常,所以我将我的发布配置 APK 部署到 Google Play。但是,当我从 Google Play 商店将应用程序安装到同一物理设备上时,signalR 停止工作。
首先,后端似乎没有问题。我没有完全排除它,但到目前为止我所记录的内容并未指出后端问题。另外,请注意,我目前在我的应用程序中设置为为每个选定的 ABI 生成一个包 (.apk)。到目前为止,我上传到 Play 商店的架构是 armeabi-v7a 和 arm64-v8a。
为了追踪这个问题,我采取了以下步骤:
- 运行 我在模拟器上的发布配置 - 有效
- 运行 我通过 USB 在设备上从 VS 2019 发布的配置 - 失败 - 设备日志显示对 signalR 集线器的出站调用和 signalR 集线器显示一切连接正常并尝试按预期调用设备客户端,但设备日志没有显示来自 signalR 集线器的入站调用成功。
- 切换发布配置中的设置以使其与调试配置保持一致,直到我发现在 Android 选项面板中切换以下设置允许应用程序接收来自 signalR 集线器的回调以工作:
<DebugSymbols>true</DebugSymbols>
<Optimize>false</Optimize>
- 然后我尝试将 APK 上传到 Google 设置这些选项并从 Google Play 部署到设备 - 失败
- 此时,我后退了一步,将 armeabi-v7a 的签名 APK 直接复制到 V50(我上传到 Play 商店的同一个 APK)并手动安装了 APK - 成功了
- 我卸载了armeabi-v7a APK,然后直接将arm64-v8a的签名APK复制并手动安装到V50 - 失败
- 我将发布配置设置恢复为默认设置,构建并签署了新的 APK,发现即使在原始的默认发布配置下,armeabi-v7a 工作正常,arm64-v8a 失败。
所以,我知道两件事:
- 在 V50 设备上,32 位 armeabi-v7a 32 位 APK 适用于 signalR,而 64 位 arm64-v8a APK 在默认发布配置设置下不适用于 signalR(但我仍然不知道为什么)。
- 如果我如上所示更新这两项的发布配置设置(并且两者都是必需的),我可以在 V50 运行 上直接从 VS 2019 调试发布配置,但这些设置不会部署为签名 APK 后更改行为。
在这一点上,我被难住了。感觉像是 64 位与 32 位的问题,但没有任何面包屑指向我下一步应该看的地方。任何人有任何线索供我追踪?
好的,终于找到了明显的罪魁祸首。不得不禁用“使用 LLVM 优化编译器”,signalR 开始使用 arm64-v8a。