Wie man einen installierten Webservice debugged
Folgende Situation: Der Service läuft (fehlerhaft) auf einem entfernten Webserver mit IIS - in meinem Fall unter W2K3. Dann gibt es noch eine Client-Anwendung, die läuft auf einem beliebigen Client - in meinem Fall handelt es sich um eine C# Anwendung, die auf meiner lokalen Workstation im Debugger laufen kann. Den einfachsten Weg, den ich gefunden haben , um das zu debuggen sieht so aus:
- Verbindung zum Webserver per RDP herstellen
- VS 2005 auf dem Webserver lokal installieren
- VS starten
- "Open" -> "Lokaler IIS" -> Website mit dem Service auswählen
Jetzt hat man schonmal den Source zur Site (und damit auch zum Service) im Editor. Als nächstes
- Debug -> Attach to Process
- Damit die IIS Prozesse sichtbar werden, "Show All Processes" und "Show Processes from all Sessions" einschalten
- Dann den IIS Prozess auswählen (Notfalls einfach _alle_ davon auswählen: Z.b. dann, wenn man nicht weiss, welcher zur "gewollten" Website gehört
- Jetzt werden die Symbole geladen. Man kann dann einen Breakpoint in den Service tun.
- Wenn der Breakpoint das gelbe Warnsymbol beinhaltet, dann wurden keine Symbole für den Service geladen: Vermutlich läuft die Website gerade nicht
- In diesem Fall: Einfach mit einem Browser die Site die den Dienst beinhaltet anfordern: Das startet die Site, und der Debugger lädt dann auch die Symbole
Nun gibt es zwei mögliche Scenarien: Man will nur den Service debuggen, oder auch den Client-Teil: Im einen Fall reicht es dann aus, einfach mit einem auf dem Webserver lokalen Browser den Service abzufragen. (Wenn man die URL des Service eingibt, bekommt man u.a. ein Formular, mit dem man die Parameter für den Service-Aufruf angeben kann. Im anderne Fall startet man einfach den Client auf der Workstation im Debugger.
Das ganze geht natürlich auch "Remote" mit nur einer Kopie von VS - aber dann muss man die Remote Debugging Tools auf dem Server installieren, und obendrein DCOM zulassen. Danach gibts dann noch ein paar Rechte-Probleme: Das war mir alles irgendwie zu kompliziert. Davon ab: Noch einfacher ist es natürlich, wenn man das ganze "lokal" Debuggen kann - also mit einem lokalen IIS oder dem in VS integrierten Webserver. Letzteres hat allerdings 2 Nachteile: Zum einen unterscheiden sich die lokalen Gegebenheiten (also die auf der Workstation) meist sehr stark von denen auf dem Server, zum anderen verhält sich der integrierte Webserver doch deutlich anders als der echte IIS in freier Wildbahn.