[.NET] Caching WebService en WebClient

Pagina: 1
Acties:

  • Zyphrax
  • Registratie: September 2001
  • Laatst online: 04-04-2023
Onze applicatie bestaat uit de volgende onderdelen:

CrmService, service om bedrijfs/persoonsgegevens op te vragen uit het CRM systeem
FinanceService, service om contracten/contractitems op te vragen uit de Contractenbase
FinanceWebClient, webclient om contracten/contractitems te beheren

Een van de webmethods van de CrmService is het ophalen van de complete lijst van bedrijven. Dit wordt gedaan als er een nieuw contract aangemaakt word. Deze complete lijst van bedrijven (naam + ID) wordt getoond in een WebCombo (component van Intersoft, intelligente dropdownlist met filter opties).

Nu zitten er in het Crm systeem bij benadering 7000 bedrijven. De CrmService geeft deze netjes als een collectie van entiteiten (CompanyCollection) terug. Aangezien het een flinke lijst van bedrijven is (en deze alsmaar groter zal worden), duurt het ophalen ervan even en dit zou je willen cachen.

Je wilt de CrmService bedrijven laten cachen, omdat deze anders voor ieder request naar de lijst van bedrijven weer een database connectie maakt en de heleboel in entiteiten zet. Daarnaast wil je de WebClient ook laten cachen (application cache ofzo), omdat deze op een aantal plaatsen de volledige lijst van bedrijven gebruikt en het zonde is om zoveel dataverkeer tussen de CrmService en de WebClient te hebben.

Ik heb iets gelezen of Notification Server van Microsoft, maar echt een mooie oplossing kunnen we niet vinden. De WebService kan niet een event doorgeven aan de WebClient dat de bedrijven geupdate zijn.

Ik ga er vanuit dat dit een veel voorkomend probleem is, weet een van jullie een gangbare oplossing?

Any sufficiently advanced technology is equivalent to magic.


  • victorv
  • Registratie: Januari 2002
  • Laatst online: 17-02-2024

victorv

Locallost

Cache de companies aan de webservice kant, na het ophalen uit de database, en cache ook op de WebClient. Je kunt voor het ophalen van de companies uit de database natuurlijk zelf bepalen of er records zijn met een timestamp later dan het tijdstip van caching en dan besluiten of je cache gaat leeggooien en nieuwe data ophaalt.

Moet het allemaal over een HTTP lijn (WebService -> WebClient), dan kunt je ook HttpCompression aanzetten. Onder Win2003 (IIS6) schijnt de Microsoft HttpCompression eindelijk betrouwbaar te werken, anders google voor de HttpCompression module van Ben Lowery (zo heette de maker geloof ik).
Alternatief voor HttpCompression is een SoapExtension die de streams en/decompressed (hint: zie Mono).

"Accomplishing the impossible means only that the boss will add it to your regular duties."


  • Zyphrax
  • Registratie: September 2001
  • Laatst online: 04-04-2023
Het lijkt mij het handigst om het caching process onafhankelijk te maken van acties van de gebruiker. Anders zit de gebruiker zodra er een wijziging gedaan is alsnog even te wachten.

Ongeveer iets van deze strekking:
CRM DB wijziging => Notify CRM Service Cache => Notify WebClient Cache

Any sufficiently advanced technology is equivalent to magic.