android - Web 代理发布方法中的 Dotmim.Sync 空引用异常
问题描述
我正在使用 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 不同的东西作为模式。
推荐阅读
- python - 如何使用函数跳出 for 循环?
- javascript - 如何禁用 React 缩小错误消息?
- python - Pandas - 确定流失年份是否发生
- python - OpenCv - 输出视频未播放
- python - 我该如何解决这个问题:通过添加权重进行采样偏差校正
- awk - awk 函数删除第 21 列中的空字段
- c# - CSharpScript。DynamicClass 作为全局变量得到 CS0234 错误
- python - 如何创建单纯形算法表
- excel - 具有 3 x xlOr 标准的自动过滤器
- math - 给定 3 个或更多数字或向量,我如何根据百分比在它们之间进行插值?