Frage

Ich verwende eine native DLL (FastImage.dll) in einem C#-ASP.NET-Webdienst, die manchmal sperrt (kann nicht gelöscht werden – sagt Zugriff verweigert);Dazu muss IIS angehalten werden, um die DLL zu löschen.Die Unfähigkeit, diese DLL im bin-Ordner meines veröffentlichten Webdienstes zu löschen, hindert mich daran, erfolgreich zu veröffentlichen (obwohl sie denkt, dass sie erfolgreich veröffentlicht wurde!), was die Entwicklung und Behebung des Fehlers schwierig macht (insbesondere, wenn alter Code seit meiner Installation problemlos ausgeführt wird). Änderungen werden möglicherweise nicht auf dem Server widergespiegelt!).Beachten Sie, dass der Fehler, der dazu führt, dass der Webdienst die DLL bombardiert und blockiert, in meinem Code liegt, der sich außerhalb dieser DLL befindet. Daher denke ich, dass dies ein allgemeineres Problem ist als nur die FreeImage-Bibliothek (um ihnen keine Probleme zu bereiten).

  1. Hat das jemand erlebt?
  2. Gibt es eine Möglichkeit, sicherzustellen, dass die Meldung „Veröffentlichung erfolgreich“ in der VS-IDE auch wirklich gemeint ist, oder eine Art Skript auszuführen, um zu überprüfen, ob die Dateien wirklich gelöscht wurden, bevor versucht wird, sie zu veröffentlichen (wie bei einem vorgefertigten Build). Schritt in VC++).(Im Moment lösche ich die Dateien vor der Veröffentlichung manuell, um sicherzustellen, dass ich weiß, dass die DLLs ersetzt wurden, anstatt alte DLLs auszuführen.Es ist jedoch immer noch ein Problem, wenn ich die DLL nicht löschen kann.)
  3. Wie kann ich feststellen, ob eine Datei erfolgreich aus einer Batchdatei gelöscht wurde?(damit ich IIS stoppen und starten kann, wenn es fehlschlägt)
  4. Ist es möglich, IIS über ein Skript zu stoppen und zu starten (vorzugsweise über die Veröffentlichungsfunktion).Aktion in der VS-IDE) und wenn ja, wie?
War es hilfreich?

Lösung

Durch die Verwendung des IISReset-Befehlszeilentools wird IIS nur auf dem lokalen Computer neu gestartet, nicht auf einem Remoteserver, auf dem Sie veröffentlichen.

Angenommen, Sie veröffentlichen auf einem Windows 2003-Server, würde ich vorschlagen, den etwas weniger drastischen Schritt zu versuchen, den IIS AppPool auf der Website oder im virtuellen Ordner, in dem der Webdienst ausgeführt wird, anzuhalten und neu zu starten.(Auf diese Weise werden nicht alle Websites, die auf dem Zielserver ausgeführt werden, offline geschaltet.) Auch dies setzt voraus, dass der Webdienst in seinem eigenen App-Pool ausgeführt wird.Im Idealfall sollte dies der Fall sein, also halten Sie es isoliert.

Ich würde empfehlen, vom Veröffentlichungsprozess Abstand zu nehmen und die Verwendung eines Webbereitstellungsprojekts in Betracht zu ziehen.Hier ist ein Beitrag im Blog von ScottGu mit Einzelheiten VS 2005-Webbereitstellungsprojekte.

Der Vorteil des Web Deployment Project-Ansatzes besteht darin, dass er Ihnen die gesamte Leistung und Funktionalität von MSbuild bietet, da es sich eigentlich nur um eine praktische Hülle um MSBuild handelt.Hier ist ein Beitrag des MSBuild-Teams zum Thema Pre-Build- und Post-Build-Funktionen

Hoffe das hilft.

Andere Tipps

Sie können das Befehlszeilentool IISReset verwenden, um iis zu stoppen/neu zu starten.Sie könnten also eine einfache Batchdatei schreiben, um iis zu stoppen, Ihre Dateien zu kopieren und dann iis neu zu starten.Ich bin mir jedoch nicht sicher, wie ich dies in die VS-Veröffentlichungsfunktion integrieren soll.

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