Docs Menu
Docs Home
/ /
Sincronizar datos

Escribir en un dominio sincronizado - SDK .NET

Al escribir datos en un dominio sincronizado mediante Sincronización Flexible, se utilizan las mismas API que al escribir en un dominio local. Sin embargo, hay algunas diferencias de comportamiento que conviene tener en cuenta.

Cuando escribe en un reino sincronizado, sus operaciones de escritura deben coincidir con ambos puntos siguientes:

  • La consulta de suscripción de sincronización

  • Los permisos en su aplicación App Services

Si intenta escribir datos que no coinciden con la consulta de suscripción y la expresión de permisos, la escritura se revierte y genera un error. CompensatingWriteException. Puede consultar los registros de App Services para ver detalles sobre por qué se denegó la escritura.

Cuando un cliente intenta una escritura "ilegal" de un objeto, ocurre lo siguiente:

  1. Debido a que el ámbito del cliente no tiene el concepto de escrituras "ilegales", la escritura inicialmente tiene éxito hasta que el ámbito resuelve el conjunto de cambios con el backend de App Services.

  2. Tras la sincronización, el servidor aplica las reglas y los permisos. El servidor determina que el usuario no tiene autorización para realizar la escritura.

  3. El servidor envía una operación de reversión, denominada "escritura compensatoria", al cliente.

  4. El reino del cliente revierte la operación de escritura ilegal y lanza un CompensatingWriteException.

Cualquier escritura del lado del cliente en un objeto entre la escritura ilegal y la escritura compensatoria correspondiente se perderá.

En la práctica, esto puede parecer como un objeto que se escribe en el reino y luego desaparece después de que el servidor envía la escritura compensatoria al cliente.

Cuando CompensatingWriteException se lanza un, se incluye un enumerable de objetos CompensatingWriteInfo. Cada CompensatingWriteInfo objeto contiene propiedades que describen el tipo de objeto, su clave principal y el motivo por el que el servidor realizó la escritura compensatoria.

La regla que controla qué datos puedes escribir en un reino sincronizado es la intersección de la configuración de sincronización de dispositivos, los permisos de App Services y la consulta de suscripción de sincronización flexible que utilizas cuando abres el reino.

Veamos un ejemplo de cómo funcionan juntos esos componentes:

La sincronización del dispositivo está configurada con los siguientes campos consultables:

  • _id (siempre incluido)

  • ownerId

La aplicación Servicios de aplicaciones tiene permisos configurados para permitir a los usuarios leer y escribir solo sus propios datos:

{
"name": "owner-read-write",
"apply_when": {},
"document_filters": {
"read": { "ownerId": "%%user.id" },
"write": { "ownerId": "%%user.id" }
},
"read": true,
"write": true
}

La suscripción de sincronización flexible en el cliente establece que el objeto debe tener un valor Status de "completado":

realm.Subscriptions.Update(() =>
{
var completedItemsQuery = realm
.All<MyTask>()
.Where(i => i.Status == "completed");
realm.Subscriptions
.Add(completedItemsQuery,
new SubscriptionOptions() { Name = "completedItems" });
});

La combinación de la consulta de suscripción y los permisos significa que el reino sincronizado solo sincroniza objetos donde:

  • El ownerId coincide con el user.id del usuario que inició sesión (de los permisos)

  • El valor de la propiedad Status es "completado" (de la consulta de suscripción)

Cualquier objeto de la colección Atlas donde el valor ownerId no coincida con el valor user.id del usuario conectado, o el valor de la propiedad Status no esté "completado", no se puede sincronizar con este dominio. Al intentar escribir un objeto de este tipo, se genera un error CompensatingWriteException.

Para obtener más información sobre errores de permiso denegado, compensación de errores de escritura y otros tipos de errores de sincronización de dispositivos, consulte Errores de sincronización en la documentación de App Services.

Para obtener más información sobre cómo configurar permisos para su aplicación, consulte Permisos basados ​​en roles y la Guía de permisos de sincronización de dispositivos en la documentación de App Services.

Volver

Configurar y abrir un reino sincronizado

En esta página