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

时间:2017-12-22 18:43:07

标签: xamarin.forms azure-sql-database azure-mobile-services mobileserviceclient

使用Xamarin Forms应用程序(Android和iOS) 当我尝试创建一个简单的表连接时,我在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;
        }
    }

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

我认为奇怪之处在于我的服务器代码是一个包含SignalR集线器代码和Easy Table的项目,但您可以通过不同的Web地址访问它们,例如 &#34; HTTP://&#34; SignalR&#34; .azurewebsites.net /&#34; 和 &#34; HTTP://&#34; EasyTable&#34; .azurewebsites.net /&#34; PostMan再次能够访问这两个表,SignalR和SignalR在Android项目上工作。但我不知道是否有域名是坏的。我是新人...如果你不能说出来,哈哈!

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

我也开始使用Azure进行调试,看起来我的应用程序甚至无法访问该服务。没有接到任何电话。我认为。但我再次尝试使用Azure进行调试,因此我可能不知道如何正确地进行调试。我按照此Tutorial来设置Azure调试

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

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

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

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

随意引用使用Azure Mobile Service Client的Xamarin.Forms示例应用程序:

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

答案 1 :(得分:0)

所以我终于开始工作了! “怎么样?”你问。我去了2个星期的假期,回来了,又开始了。将tut项目的新URL复制到我的实际项目中,进行了一些测试。然后这是重要的事情,然后我将我用过的相同地址放回到我的应用程序中,并且...它刚刚起作用....我没有对代码进行操作,现在它似乎工作了......所以几乎一个月的工作时间都丢失了,而我所要做的只是放入一个不同的URL,运行它,然后把原来的URL放回去....可爱。我猜它清除了一些奇怪的临时文件,搞乱程序或其他东西......即使我无数次删除了临时文件......我不明白,但是我还是去了!