Laden...

OData WebService wirft manchmal "DataServiceContext.SaveChanges" Exception

Erstellt von baer999 vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.693 Views
B
baer999 Themenstarter:in
375 Beiträge seit 2007
vor 8 Jahren
OData WebService wirft manchmal "DataServiceContext.SaveChanges" Exception

Kann mir jemand auf die Sprünge helfen, woran das liegen kann, dass (manchmal, nicht immer!) ein Update per WebService folgenden Fehler wirft:

Source        : Microsoft.Data.Services.Client -> HandleResponse
Computer      : 04.07.2015 12:07:05 -> Rechner2 Verion: 1.6.3.63
Error         : Fehler beim Verarbeiten dieser Anforderung.
Stack Trace   : at System.Data.Services.Client.SaveResult.HandleResponse()
   at System.Data.Services.Client.BaseSaveResult.EndRequest()
   at System.Data.Services.Client.DataServiceContext.SaveChanges(SaveChangesOptions options)

betrifft folgendes Code Snippet:

                WebService_V7 context = new WebService_V7(new Uri(WebBase.Url));
                Computer comp = context.Computer.Where(c => c.ID == settings.ID).FirstOrDefault();

                if (comp == null) return "";

                comp.Date = DateTime.Now;

                context.UpdateObject(comp);
                context.SaveChanges();

Kann es daran liegen, dass evtl. in der Zwischenzeit ein anderes Update stattfand und die Daten somit inzwischen neu geschrieben wurden, weshalb der aktuelle Update Befehle dann fehlschlägt.

Hat jemand eine Idee?

thx!

T
314 Beiträge seit 2013
vor 8 Jahren

Fehler abfangen, loggen und behandeln = Win, win und win.

Alles andere ist raten.

B
baer999 Themenstarter:in
375 Beiträge seit 2007
vor 8 Jahren

Danke für den Hinweis, habe Exceptions angestellt und in der Inner Exception steht nun tatsächlich folgendes:

<?xml version="1.0" encoding="utf-8"?><m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><m:code /><m:message xml:lang="de-DE">An error occurred while processing this request.</m:message><m:innererror><m:message>Das Objekt kann nicht bestehend bleiben. Es wurde von einem anderen Programm modifiziert oder gelöscht (bereinigt).</m:message><m:type>DB.Exceptions.LockingException</m:type>

Heitß die Vermutung scheint wahr zu sein, ich muss wohl die Tabellen besser kapseln, da 3 Methoden die selbe Tabelle manipulieren, wenn aber jede Methode eine eigene Tabelle besitzt, müsste das ja dann passen...

Danke jedenfalls für die simple aber effektive Hilfe 😉

1.378 Beiträge seit 2006
vor 8 Jahren

Wenn mehrere benutzer auf die gleichen Daten zugreifen, musst du die Daten entweder vorher sperren, oder sie mit einem Timestamp versehen und vor dem Update prüfen ob sie sich verändert haben und entsprechend darauf reagieren.

Lg, XXX