我正在使用Dotmim.sync框架。我正在尝试将 mssql 数据库与我的 xamarin android 应用程序的 sqlite 数据库同步。因此,我实现了 Web 代理以从 Android 应用程序访问数据库。 代理启动正常,但是当我从 android 应用程序调用同步时,Post 方法给出了空引用错误,但我找不到空值。
在 ASP.NET Core Web 应用程序的启动文件中:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
// [Required]: To be able to handle multiple sessions
services.AddMemoryCache();
// [Required]: Get a connection string to your server data source
var connectionString = @"[my connection string]";
// [Required]: Tables list involved in the sync process
var tables = new string[] { "dbo.Album", "dbo.Artist", "dbo.Customer", "dbo.Invoice", "dbo.InvoiceItem", "dbo.Track" };
// [Required]: Add a SqlSyncProvider acting as the server hub.
services.AddSyncServer<SqlSyncChangeTrackingProvider>(connectionString, tables);
}
同步控制器:
[ApiController]
[Route("api/[controller]")]
public class SyncController : ControllerBase
{
private WebServerManager manager;
public SyncController(WebServerManager man) => this.manager = man;
[HttpPost]
public async Task Post()
{
await manager.HandleRequestAsync(this.HttpContext);
} //----> the Null error comes
[HttpGet]
public async Task Get() => await manager.HandleRequestAsync(this.HttpContext);
}
在 Android 应用程序中调用的同步函数:
public async Task SyncDatabase(string connString, Context context)
{
var handler = HttpClientHandlerService.GetInsecureHandler();
HttpClient httpClient = new HttpClient(handler);
httpClient.DefaultRequestHeaders.Host = $"localhost:44372";
var serverOrchestrator = new WebClientOrchestrator("https://10.0.2.2:44372/api/sync", client: httpClient);
// Second provider is using plain sqlite provider
var clientProvider = new SqliteSyncProvider(connString);
var agent = new SyncAgent(clientProvider, serverOrchestrator);
try
{
var result = await agent.SynchronizeAsync(); //---> error comes when this line is called
var output = result.ToString();
output = output.Replace("\n", " ").Replace("\t", " ").Replace("\r", " ");
Toast.MakeText(context, output, ToastLength.Long).Show();
}
catch (Exception e)
{
Toast.MakeText(context, e.Message, ToastLength.Long).Show();
}
}
让我知道我应该提供哪些进一步的信息来解决这个问题。
编辑: 从邮递员打电话会出现以下错误:
{"tn":"HttpHeaderMissingExceptiopn","m":"Header dotmim-sync-scope-name is missing."}
解决方案:
我尝试与不同的数据库和表进行同步,效果很好,因此很明显,dotmim 与我使用的表存在一些问题。因此,经过深思熟虑,我尝试使用不同的模式名称而不是 dbo,因为另一个可用的数据库有其他内容。事实证明,如果模式名称是 dbo,同步就会出现一些问题,当它尝试创建自己的新表时,可能会出现一些问题。因此,使用与 dbo 不同的东西作为模式。
到目前为止我发现的唯一问题是级联