创建新的 MobileServiceClient() 会冻结 VS 和 Android 应用程序

Creating a new MobileServiceClient() freezes VS and Android app

正在开发 Xamarin Forms 应用程序(Android & iOS) 当我尝试创建一个简单的 table 连接时,我在 Azure 移动应用程序中 Visual Studio 冻结了大约 7 秒,然后当它返回时它退出了代码并且 Android应用程序,运行 在调试中被永久冻结。

单步执行代码时它会跳过 client = new MobileServiceClient(appUrl); 然后当它到达下一行时它会冻结。但下一行是什么并不重要。我之后放了很多不同的东西,但它仍然冻结。此外,这是在 try/catch 块中,但没有抛出异常。

我也想看看是不是服务器端的问题。但是 Post 和 Get with PostMan 都可以正常工作。所以我认为我的服务器很好。虽然不完全确定...

下面是部分代码:

public class ChatStorageAzureService : IChatStorageAzureService
{
    public MobileServiceClient client { get; set; }
    private IMobileServiceSyncTable<MessageViewModel> chatTable;
    public static bool UseAuth { get; set; } = false;

    private static ChatStorageAzureService instance;
    public static ChatStorageAzureService Instance => instance ?? (instance = new ChatStorageAzureService());

    public async Task InitializeAsync()
    {
        if (client?.SyncContext?.IsInitialized ?? false)
            return;

        var appUrl = "http://"MY-WEBSITE".azurewebsites.net/";
        try
        {
            client = new MobileServiceClient(appUrl);

            var path = "syncstore.db";

            var store = new MobileServiceSQLiteStore(path);

            store.DefineTable<MessageViewModel>();

            await client.SyncContext.InitializeAsync(store);

            chatTable = client.GetSyncTable<MessageViewModel>();
        }
        catch (Exception e)
        {
            Debug.WriteLine("Exception thrown in Initialize: " + e);
            throw;
        }
    }

已在异步方法中调用 InitializeAsync。它已在构造函数中使用 .Wait() 方法调用。它已通过按下按钮或在页面创建中调用。我尝试了很多不同的方式来打电话。但是总是死机。

我觉得奇怪的一件事是我的服务器代码是一个包含 SignalR hub 代码和 Easy Table 的项目,但您可以通过不同的网址访问它们,例如 "http://"信号R".azurewebsites.net/" 和 "http://"简单Table".azurewebsites.net/" PostMan 再次能够访问 tables 和 SignalR,并且 SignalR 在 Android 项目上工作。但是我不知道必须使用域是否不好。我是新来的...如果你还不知道,哈哈!

我按照这个 Tutorial 进行了 Easy Table 集成,当我在一个单独的项目中执行它时,它运行良好。我正在尝试将它集成到我的实际项目中,这就是我遇到所有这些问题的地方。

我还打开了 Azure 调试功能,但我的应用似乎从未访问过该服务。从来没有接到电话。我认为。但我还是第一次使用 Azure 进行调试,所以我可能不知道如何正确地进行调试。我按照此 Tutorial 设置 Azure 调试

感谢所有帮助!

您的 path 不正确。它需要是目录路径,例如在 iOS 上它是 /<AppHome>/Library/<YourAppName>/syncstore.db.

我们可以利用 MobileServiceClient.DefaultDatabasePath 以跨平台的方式获取默认数据库路径。

var path = Path.Combine(MobileServiceClient.DefaultDatabasePath, "syncstore.db");

随时参考此 Xamarin.Forms 使用 Azure 移动服务客户端的示例应用程序:

https://github.com/brminnick/UITestSampleApp/blob/master/Src/UITestSampleApp/Services/AzureService.cs

所以我终于让它工作了!!! "How?" 你问。我去度假了 2 周,回来后又开始了。将tut项目的new URL复制到我的实际项目中,做了一些测试。然后这是一件大事,然后我将我一直使用的相同地址放回到我的应用程序中,并且......它只是工作......我对代码没有做任何事情,现在它似乎工作......所以几乎浪费了一个月的工作时间,我所要做的就是把一个不同的 URL 放进去,运行 它,然后把原来的 URL 放回去....可爱.我猜它清除了一些奇怪的临时文件,这些临时文件弄乱了程序或其他东西......即使我无数次删除了临时文件......我不明白,但我继续前进!