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