0

Je tirai une nouvelle ERO sur Google Cloud Compute ubuntu vm et essaie d'écrire des objets via un projet Xamarin.Android:Royaume Object Server affiche vide après l'ajout d'éléments

public class TestObject : RealmObject 
{ 
    public string TestString { get; set; } 
    public int TestInt { get; set; } 
} 

//new non-existent realm, I also tried a public realm -> realm://###.###.###.###/newrealm 
var realmUrl = "realm://###.###.###.###/~/newrealm"; 

//preconfigured admin credentials 
var creds = Credentials.UsernamePassword("[email protected]", "password", false); 
var user = await User.LoginAsync(creds, new Uri("http://###.###.###.###:9080")); 
var config = new SyncConfiguration(user, new Uri(realmUrl)); 
var realm = Realm.GetInstance(config); 

//this event never fires 
Session.Error += (sender, errorArgs) => { var ex = errorArgs.Exception; }; 

//left this in just to be sure there were no permissions issues 
await user.ApplyPermissionsAsync(PermissionCondition.Default, realmUrl, AccessLevel.Write); 

//this will contain objects on subsequent runs 
var existing = realm.All<TestObject>().ToList(); 

//also tried realm.Write(() => { }); 
using (var trans = realm.BeginWrite()) 
{ 
    var test = new TestObject(); 
    test.TestString = "test"; 
    test.TestInt = 99; 
    realm.Add(test); 
    trans.Commit(); 
}; 

Le résultat est que le nouveau domaine est créé avec succès sur le ROS distant, mais il reste vide selon le tableau de bord et le navigateur de domaine même après plusieurs exécutions de ce code. Vous remarquerez dans mon commentaire que le domaine local contient les objets écrits, mais pas la télécommande. Les journaux du serveur affichent beaucoup de messages lorsque ce code est exécuté, mais il n'y a pas d'avertissement ou d'erreur. Qu'ai-je manqué?

+0

Pouvez-vous essayer d'ajouter 'await realm.GetSession(). WaitForUploadAsync()' à la fin, les données locales auront été synchronisées avec le Realm Object Server. Voici les docs: https://realm.io/docs/xamarin/1.6.0/api/reference/Realms.Sync.Session.html#Realms_Sync_Session_WaitForUploadAsync –

+0

@NikolaIrinchev le code ne semble jamais progresser après WaitForUploadAsync. Les points de rupture ne sont pas atteints et les appels System.Diagnostic.Debug.WriteLine ne s'impriment pas. Toujours pas d'erreur dans un bloc try/catch ou Session.Error. Je rencontre ce comportement si je place cet appel avant même d'écrire quoi que ce soit dans le domaine. Sortie de l'application: [Mono] DllImport cherchant dans: 'realm-wrappers' ('librealm-wrappers.so'). [Mono] Recherche de 'realm_syncsession_wait'. [Mono] Sondage 'realm_syncsession_wait'. [Mono] Trouvé comme 'realm_syncsession_wait'. [Mono] [0x96d92930] travailleur non pris en compte, délai d'expiration? pas interrompu? non – aweFalafelApps

+0

Hm ... une autre question, votre 'realmUrl' semble manquer du port dans l'extrait que vous avez posté - est-ce le cas dans votre application, ou juste un oubli lorsque vous collez du code sur SO? Si c'est le cas, alors vous avez besoin du port comme 'realm: //###.###.###: 9080/~/newrealm' –

Répondre

1

Grâce à Nikola, il me manquait le numéro de port sur l'URL du domaine. Après l'avoir ajouté, tout semble fonctionner correctement.

var realmUrl = "realm://###.###.###.###:9080/~/newrealm";

semble étrange qu'aucune erreur de tout type ont été jetés, les objets étaient silencieusement pas écrits dans le domaine distant.

+0

Heureux d'avoir aidé! Pour élaborer sur l'absence d'erreurs, la Realm Mobile Platform est conçue pour fonctionner correctement lorsque l'appareil est hors ligne. Dans ce cas, lorsqu'il n'est pas en mesure de se connecter au serveur, il suppose qu'il est hors connexion ou que le serveur est inaccessible pour une raison quelconque (par exemple un proxy ou d'autres problèmes de réseau). Donc, il stocke les données localement et chaque fois que la connectivité est restaurée, il va tout télécharger. –

+0

Serait-il possible d'afficher au moins une sortie de diagnostic lorsqu'une connexion réseau est présente, mais qu'une connexion au domaine distant ne peut pas être établie? – aweFalafelApps