Wie wird WCF Dataservice dazu gebracht, das Verfolgen von Entitätsänderungen zu stoppen?

8

Ich habe eine Web-App, die OData Webservice ( DataServiceContext ) über einen Proxy aufruft. Das Problem ist der Code, der zwar jedes Mal einen Aufruf an OData webservice aufruft, aber nach dem Ändern von Inhalten im Content Management System (SDL Tridion) immer alte Daten zurückgibt.

  %Vor%

Wir mussten den Apppool zurücksetzen, um die neuesten Datenänderungen zu sehen.

Während ich mehr debuggte, bemerkte ich das

%Vor%

Ich habe versucht, es zu beheben, indem ich .Detach() explizit aufruft, bevor ich den Wert von getPageContentForUrl zurücksende, also etwas wie

%Vor%

Meine Frage ist, kann ich das oben genannte auf "globaler" Ebene machen, vielleicht muss der Webservice immer den Status als "Geändert" annehmen, da ich Code nicht manuell in Detach() schreiben möchte?

    
parsh 08.11.2012, 09:45
quelle

2 Antworten

9

Ich denke, die Antwort liegt tatsächlich - wie Sie vermutet haben - in dem von Ihnen verwendeten Proxy oder vielmehr im DataServiceContext. Das hat Microsoft zu sagen:

  

Standardmäßig materialisiert der Client nur einen Eintrag im Antwort-Feed   in ein Objekt für Entitäten, die nicht bereits von der   DataServiceContext. Das bedeutet, dass sich Änderungen an Objekten, die bereits in der   Cache wird nicht überschrieben. Dieses Verhalten wird durch Angabe von a gesteuert   MergeOption-Wert für Abfragen und Ladevorgänge.

Das klingt für mich genau wie das Verhalten, das Sie beschreiben. Glücklicherweise kann das Zwischenspeichern deaktiviert werden, indem Sie die MergeOption-Eigenschaft für den DataServiceContext festlegen.

Siehe Ссылка .

    
Quirijn 09.11.2012, 10:57
quelle
5

Wie Quirijn bereits bemerkt hat, scheint es, als ob der OData-Service von Tridion Content Delivery zwischengespeicherte Ergebnisse in Ihrem Setup zurückgibt. Das Entfernen und erneute Anfügen des Clients ist eine brutale Lösung.

Der Content Delivery Object Cache von Tridion entfernt (wenn er richtig konfiguriert ist) automatisch Objekte aus seinem Cache, wenn sie durch Veröffentlichungsaktionen vom Content Management System aktualisiert werden. Da dies nicht in Ihrer Einrichtung geschieht, ist es wahrscheinlich, dass Ihr Objekt-Cache nicht korrekt konfiguriert ist.

Der einfachste Schritt ist, die Datei cd_storage_conf.xml Ihrer cd_webservice-Webanwendung zu finden und das Objekt-Caching auszuschalten (wie Quirijn bereits sagte):

%Vor%

Verarbeiten Sie den Anwendungspool jetzt wie zuvor und testen Sie ihn erneut. Wenn die OData-Aufrufe jetzt immer den aktualisierten Inhalt zurückgeben, wurde Ihr Problem tatsächlich durch einen falsch konfigurierten Objekt-Cache verursacht.

Leider haben Sie in diesem Stadium lediglich den Objekt-Cache ausgeschaltet, der die Belastung Ihres Web-Service reduzieren kann. Der nächste Schritt sollte sein, das Konfigurationsproblem Ihres Objektcaches zu beheben.

Dafür würde ich vorschlagen, den SDL Professional Service oder einen der Partner von SDL zu kontaktieren. Obwohl das Konfigurieren des Object Cache nicht allzu schwierig ist, ist es etwas zu kompliziert, um es im Q & A-Format zu erklären.

    
Frank van Puffelen 08.11.2012 18:51
quelle