2016-05-25 9 views
0

ein Wörterbuch dict haben, die Info istMSSyncTable einfügen

(lldb) po dict 
{ 
createdAt = "2016-05-25 06:29:16 +0000"; 
deleted = 0; 
diskId = "f54b4bd9-694b-4856-8b8f-7f3afa18fd2e"; 
updatedAt = "2016-05-25 06:29:16 +0000"; 
userId = "4f119c15-2370-4ad7-bcbc-2cd4254b356e"; 
version = "1.0"; 
} 

I MSSyncTable Insert-Funktion aufrufen:

-(void)insert:(nonnull NSDictionary *)item completion:(nullable MSSyncItemBlock)completion; 

die Informationen erfolgreich zu lokalen db gespeichert wird, sondern auf dem mobilen Service-Seite, das empfangene Objekt nicht die Informationen über Version und updatedAt und createdAt, sie sind null, dann Handy-Service-Fehler an iOS app wie folgt zurück:

Weiß jemand, was hier vor sich geht?

Update: Mein Server-Side-Code ist wie

public async Task<IHttpActionResult> PostTodoItem(TodoItem item) 
    { 
     TodoItem current = await InsertAsync(item); 
     return CreatedAtRoute("Tables", new { id = current.Id }, current); 
    } 

Brauche ich gesetzt createdAt, updateAt und hier Version?

Aktualisiert: die Konsolenausgabe in Mobile Service Seite:

w3wp.exe Information: 0: Nachricht = 'ExBenStoresFavorite' Operation = DefaultHttpControllerSelector.SelectController w3wp.exe Information: 0: Nachricht =‘ ExBenService.Controllers.ExBenStoresFavoriteController 'Operation = DefaultHttpControllerActivator.Create w3wp.exe Information: 0: Nachricht = 'ExBenService.Controllers.ExBenStoresFavoriteController' Operation = HttpControllerDescriptor.CreateController w3wp.exe Information: 0: Nachricht =' Ausgewählte Aktion ‚PostExBenStoresFavorite (ExBenStoresFavorite item) '', Operation = Api ControllerActionSelector.SelectAction w3wp.exe Information: 0: Nachricht = 'Wert gelesen =' ExBenService.Models.ExBenStoresFavorite '', Operation = JsonMediaTypeFormatter.ReadFromStreamAsync w3wp.exe Information: 0: Nachricht = 'Parameter' Element 'an den Wert gebunden 'ExBenService.Models.ExBenStoresFavorite' ', Operation = FormatterParameterBinding.ExecuteBindingAsync w3wp.exe Informationen: 0: Nachricht =' Der Modellstatus ist gültig. Werte: item = ExBenService.Models.ExBenStoresFavorite‘, Operation = HttpActionBinding.ExecuteBindingAsync w3wp.exe Information: 0: Operation = TableQueryFilter.OnActionExecutingAsync w3wp.exe Information: 0: Operation = TableControllerConfigAttribute.OnActionExecutingAsync w3wp.exe Information: 0: Message = 'Wird den' JsonMediaTypeFormatter 'Formatierer' verwenden, Operation = JsonMediaTypeFormatter.GetPerRequestFormatterInstance w3wp.exe Information: 0: Nachricht = 'Ausgewählter Formatierer =' JsonMediaTypeFormatter ', content-type =' application/json; charset = utf-8 '', Operation = DefaultContentNegotiator.Negotiate w3wp.exe Fehler: 0: Nachricht = 'Der Vorgang ist mit dem folgenden Fehler fehlgeschlagen:' Ein Null-Speicher-generierter Wert wurde für ein nicht nullbares Mitglied 'Version' zurückgegeben vom Typ 'ExBenService.Models.ExBenStoresFavorite'. '.' w3wp.exe Warnung: 0: Message = 'UserMessage =' Die Operation ist mit dem folgenden Fehler fehlgeschlagen: 'Ein NULL-Speicher generierter Wert wurde für ein nicht nullbares Member' Version 'vom Typ' ExBenService.Models.ExBenStoresFavorite 'zurückgegeben. '.' ', Status = 400 (BadRequest), Exception = System.Web.Http.HttpResponseException: Die Verarbeitung der HTTP-Anfrage führte zu einer Ausnahme. Weitere Informationen finden Sie in der HTTP-Antwort der Eigenschaft 'Response' dieser Ausnahme. bei Microsoft.Azure.Mobile.Server.Tables.EntityUtils.d__0.MoveNext() --- Ende des Stack-Trace von früheren Speicherort, wo Ausnahme ausgelöst wurde --- bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task Aufgabe) bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task-Task) bei Microsoft.Azure.Mobile.Server.EntityDomainManager 1.<InsertAsync>d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Azure.Mobile.Server.TableController 1.d__3.MoveNext() Ausnahme geworfen: 'System.Web.Http.HttpResponseException' in mscorlib.dll

+0

Sind diese mobilen Dienste oder App-Service? –

+0

Es ist ein Mobilfunkdienst – ExBen

Antwort

0

Endlich finde ich die Ursache. So habe ich einen Desktop, der auch EntityFramework verwendet und ich verwende es, um Daten in meine Datenbank hinzuzufügen. Und die Datenbank wird von dieser Desktopanwendung erstellt. Das Feld "Version" in der Datenbank ist "Nullable", aber wenn der mobile Dienst die Datenbank erstellt, ist das Feld "Version" NICHT NULL. Das ist der Unterschied. Also die Lösung ist die Datenbank zu löschen, kann durch den mobilen Dienst neu erstellen, es funktioniert jetzt.

1

Wenn Sie versuchen, sind Ordnen Sie die Felder updatedAt, createdAt und Version auf die Systemeigenschaften, dann müssen Sie die Namen verwenden ms_createdAt, ms_updatedAt und ms_version. Beachten Sie, dass diese auf dem Client nicht festgelegt werden können, da sie auf der Serverseite festgelegt und nach dem Push-Vorgang an den Client zurückgegeben werden. Weitere Informationen zum zu verwendenden Core Data Model finden Sie unter Get Started with Offline Data Sync in Mobile Services.

, auch bei der Fehlersuche zu helfen, empfehle ich, dass Sie Ihre ausgehenden Anfragen von Ihrem iOS-Client anmelden. Siehe Log outgoing requests in iOS native client. Sie sollten sowohl die Anfrage als auch die Antwort protokollieren und prüfen, ob die Systemeigenschaften tatsächlich von Ihrem Server zurückgegeben werden.

+0

Danke. Ich werde versuchen, die Anfrage und Antwort zu protokollieren, um mehr zu erfahren. – ExBen

+0

Ich füge meinen serverseitigen Code in den Beitrag ein. Muss ich updatedAt, createdAt und Version in dieser PostTodoItem-Methode festlegen? – ExBen

+0

Nein, der Server hat sie als Teil der EntityData-Klasse. Ihr Problem ist wahrscheinlich, dass Ihr CoreData-Modell nicht die richtigen Feldnamen hat. –

0

In einem Mobilen Service, die eingereichten Service-Felder müssen einen Doppelstrich haben - das heißt __deleted, __createdAt, __updatedAt und __version. Diese müssen bestimmte Formate haben - speziell __deleted muss ein boolescher Wert sein und __version muss eine Byte-Sequenz sein. Darüber hinaus benötigen Sie ein id-Feld, das eine GUID ist.

+0

mein Code trifft alles, was Sie gesagt haben – ExBen