2009-08-20 4 views
4

Wir haben eine langlebige ASP.NET 3.5-Anwendung, die wir von einem physischen Server mit Windows 2005 + IIS 6 zu einem virtuellen unter Windows 2008 + IIS7 verschieben. Die neue Maschine wird die Identität der alten übernehmen - IPs, DNS, etc.ASP.NET Servermigration

Unsere Kunden halten unsere Website für Stunden - manchmal sogar Tage. Meine Befürchtung ist, dass, wenn wir diese Umschaltung vornehmen, plötzlich alle Viewstates fehlschlagen, weil der MachineKey sich geändert hat.

Ist diese Art von Störung vermeidbar? Kann ich den ComputerKey des neuen Servers so einstellen, dass er derselbe ist wie der jetzt verwendete? Ich denke, es ist automatisch generiert - kann ich herausfinden, was es ist?

Oder ist es das überhaupt wert - ist das eine Situation, in der Benutzer nicht erwarten können, so lange auf einer Website zu landen?

Antwort

4
<system.web> 
    <machineKey validationKey="Generate on your own" decryptionKey="Generate on your own" validation="3DES"/> 
</system.web> 

Sie sind richtig, die Übertragung wird alle Autorisierungs-Cookies ungültig machen. Ich glaube, es sei denn, Sie haben ViewState-Verschlüsselung aktiviert, ViewState ist in Ordnung.

Wenn Sie das Maschinenkey-Attribut hinzufügen, spielt es keine Rolle, wo die Site gehostet wird. Solange der Computerschlüssel identisch ist, ist die Verschlüsselung und Entschlüsselung in Ordnung. Darüber hinaus müssen/sollten Sie dies verwenden, wenn Ihre Site in einer Umgebung mit Lastenausgleich gehostet wird.

msdn.microsoft.com/en-us/library/ms998288.aspx

2

Typischerweise wird eine Migration wie dies wäre ein Vollausfall sein. Die meisten Websites kündigen dies an und stellen während der Umstellung eine temporäre Ausfallseite bereit. Außerdem stelle ich mir vor, dass es eine Zeit geben wird, in der keine Maschine verfügbar ist, so dass Anfragen unabhängig vom Maschinenschlüssel und dem Ansichtszustand fehlschlagen. Ich würde empfehlen, dass Sie einen vollständigen Ausfall erzwingen. Auf diese Weise können Sie auch den neuen Server testen, bevor er in Betrieb genommen wird.

Alternativ könnten Sie der neuen Maschine neue IPs geben und langsam neuen Verkehr zu der neuen erzwingen, während bestehende Verbindungen auf der alten bleiben würden. Dies würde eine Art von Gerät (Router, Inhaltsschalter, etc.) erfordern, um dies zu verwalten. Nicht sicher, ob sich Ihr Server hinter einem solchen Gerät befindet.

Aber zurück zu Ihnen Frage, ja, Sie können den Maschinenschlüssel manuell einstellen. Dies ist in der machine.config. Nehmen Sie diesen Abschnitt von Ihrem alten Maschine und kopieren Sie sie über:

<machineKey 
validationKey="..."   
decryptionKey="..." 
... 
/> 

Es ist in der Regel befindet sich hier: C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \ machine.config

Hier ist ein Artikel über die Verwendung der same machine Key.

+0

Danke dafür - es kam mir auf, dass das Setzen des Schlüssels JETZT einfach das Problem machen würde, um das ich mich sorge, passieren eher. Das heißt, die Migration würde problemlos funktionieren, aber Anforderungen auf dem vorhandenen Server würden fehlschlagen. – n8wrl

2

Sie können den MachineKey explizit festlegen, tatsächlich wird dies ziemlich häufig durchgeführt, wenn Sie verschiedene Sitzungsstatusmodelle mit Webfarmen verwenden. Here's a link, wie es geht (am unteren Rand des Artikels).

Leider, wenn Sie Ihren aktuellen ComputerKey nicht bereits manuell generiert haben, wird er bei jedem Neustart der Anwendungsdomäne zufällig generiert (was bedeutet, dass Sie jetzt anfällig für Validierungsprobleme sind, wenn Ihr Server jemals Schluckauf gegangen ist).

Sie können jedoch die aktuelle machineKey entdecken, indem Sie in der Registrierung in Verwendung ist bei

HKU \ SID \ Software \ Microsoft \ ASP.NET \ 2.0.50727.0

(wenn Sie IIS6 verwenden). Wenn Sie vorsichtig sind, können Sie die neue Box möglicherweise mit demselben Schlüssel einrichten, migrieren und nichts falsch machen. Aber das sind berühmte letzte Worte;)