Kann ich einen Abschnitt von app_code haben, der getrennt vom Rest des Ordners kompiliert?

StackOverflow https://stackoverflow.com/questions/4798086

  •  24-10-2019
  •  | 
  •  

Frage

Wir haben eine Website mit einer Vielzahl von zwischengespeicherten Objekten, die in statischen Variablen in app_code gespeichert sind. Immer wenn wir einen App_Code in unsere Produktionswebserver drücken, recycelt er den IIS -Pool und spüle den Cache. Es spüle den Cache jedoch nicht, wenn wir Änderungen in .aspx- und .aspx.cs -Dateien herausschieben.

Ich muss eine Reihe von Klassen haben, die mehrmals am Tag aktualisiert werden, um in app_code verwiesen zu werden. Ich möchte entweder einen Abschnitt meines App_Code, den ich mehrmals täglich aktualisieren kann, ohne den IIS zu radeln und meinen Cache zu spülen, oder die Fähigkeit, Klassen außerhalb von App_code aus app_code zu referenzieren.

Gibt es eine Lösung, die zu meinem Problem passt?

War es hilfreich?

Lösung

Aktualisierungen an app_code oder / bin / recyceln Sie Ihre Anwendungspools immer, glaube ich. Wenn Sie sagen, dass Sie ein Bereitstellungsszenario haben, in dem .aspx.cs -Dateiaktualisierungen Ihren Anwendungspool nicht recyceln. Wenn Sie sich auf den Seitentyp selbst beziehen können, können Sie Ihren Code möglicherweise in den .aspx verschieben. CS -Dateien verhindern, dass das Recycling stattfindet. Das ist jedoch eine hässliche Wahl.

Ein Vorschlag ist, Ihr Design zu überarbeiten, um die Anzahl der täglich erforderlichen Quellcode -Updates zu verringern. Verwenden Sie möglicherweise XML- oder Datenbankspeicher und entwerfen Sie Ihre Anwendung als etwas generischer und weniger anfällig für binäre Updates.

Oder partitionieren Sie Ihre Anwendung in mehrere kleinere virtuelle Anwendungen. Der Aufwand könnte dazu höher sein, aber in diesem Fall müssen Sie die gesamte App mit jeder Bereitstellung nicht recyceln, wenn Ihre Bewerbung kompartmentaler ist. Sie müssten nur die Module recyceln, die mit Ihrem Einsatz betroffen waren.

Ein weiterer Vorschlag könnte darin bestehen, die Cluster -Serverarchitektur auf die Einrichtung von Clustered -Architektur einzurichten. Planen Sie die Bereitstellungen so, dass sie auf einen Clusterknoten angewendet werden. Halten Sie nur das andere aktiv, während das geplante Update stattfindet, und rollen Sie dann Updates auf den zweiten Knoten aus, sobald das erste Knoten -Update der App -Pool -Recycling abgeschlossen ist.

Ein weiterer Vorschlag wäre, Ihre Bereitstellungszeiten auf weniger absendliche Zeiten zu ändern, wenn dies machbar ist.

Entstehen die häufigen Updates, nur weil es viele Entwicklungsänderungen gibt?

Andere Tipps

Ein weiterer Winkel wäre die Verwendung einer verteilten Cache -Lösung anstelle von Httpruntime -Cache.

Httpruntime Cache hat zwei Hauptnachteile:

1) Es wird gespült, wenn Ihre App -Domain recycelt wird. Dies ist standardmäßig sowieso alle 29 Stunden durchgeführt, auch wenn Sie App_Code nicht ändern.

2) Es ist auf einem einzelnen Webserver lokalisiert. Wenn Ihr Webserver also auf eine größere Webfarm skalieren muss, wird Ihr Cache immer weniger effektiv, da die Cache -Einträge auf allen Webservern nicht synchronisiert sind.

Distributed Cache -Lösungen gehen diese Probleme durch, indem Sie eine separate Cache -Ebene zwischen Ihrer Webstufe und Ihrer Back -End -Datenquelle erstellen.

Beispiellösungen:

  • memcached
  • Redis
  • Oracle -Kohärenz (kommerziell)

Dies führt natürlich zu einer komplexeren Architektur und erfordert mehr Hardware oder VMs.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top