Web代理post方法中Dotmim.Sync空引用异常

问题描述 投票:0回答:2

我正在使用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."}

编辑2: 客户端的服务器编排器:

在服务器端:

异常详情:

android synchronization
2个回答
0
投票

解决方案:

我尝试与不同的数据库和表进行同步,效果很好,因此很明显,dotmim 与我使用的表存在一些问题。因此,经过深思熟虑,我尝试使用不同的模式名称而不是 dbo,因为另一个可用的数据库有其他内容。事实证明,如果模式名称是 dbo,同步就会出现一些问题,当它尝试创建自己的新表时,可能会出现一些问题。因此,使用与 dbo 不同的东西作为模式。


0
投票

到目前为止我发现的唯一问题是级联

© www.soinside.com 2019 - 2024. All rights reserved.