ASP-Anwendung Deployment - Hilfe!

12/09/2008 - 09:59 von Jürgen Kraus | Report spam
Guten Morgen,

vorab bitte ich um Entschuldigung: der folgende Beitrag wird etwas lànger.
Aber ich will hier nicht einfach rufen "Hilfe, geht nicht!", sondern die
Problemzonen konkret benennen.

Wir haben jetzt nach gut einem 3/4 Jahr eine Anwendung unter VS2005 für
ASP.NET 2.0 fertiggestellt. Diese Anwendung wurde bisher ausschließlich
mit dem VS2005-eigenen Testserver gestartet und getestet. Hier
funktionieren alle im folgenden beschriebenen Dinge völlig problemlos!

Seit Anfang dieser Woche soll ich nun die Anwendung "Real life" tauglich
machen und muss feststellen: Es làuft nicht!

Da wir im Haus keinen IIS-Server haben, müssen wir die Tests auf die von
Windows XP Professional (5.1) bzw. Vista Business (7.0) mitgelieferten
Mini-Server beschrànken und wàren schon froh, wenn es dort funktionieren
würde.

1. Wir müssen (leider) ein COM-Objekt benutzen, das eine "black box" ist.
Keine Chance einer Substitution oder Zugriff auf Quellcode - use it as is!
Alles wurde ganz normal über regsvr32 registriert. VS2005 hat mit dem
Pràfix "Interop" einen Wrapper erstellt und wir konnten die Funktion des
COM-Objekts einbinden.

Sobald die Anwendung auf dem IIS-Server ist, funktioniert der Zugriff auf
das COM-Objekt nicht mehr:

Die COM-Klassenfactory für die Komponente mit der CLSID ... konnte
aufgrund des folgenden Fehlers nicht abgerufen werden: 80070005:
UnauthorizedAccess.

Na gut - ist ja logisch. Also mache ich das, was der Server mir vorschlàgt
und vergebe Leserechte auf die COM-DLL für den User ASPNET. Aber es làuft
immer noch nicht. Das Ende vom Lied: Ich gewàhre dem Ordner, in dem die
DLL liegt und allen Programmen drumherum und allen dazugehörigen
Unterordnern VOLLzugriff auf alles. Und es làuft immer noch nicht!

Mehr als "Jeder darf alles" kann ich doch als Recht gar nicht vergeben?
Also muss ich hier passen. K.A., was der Server hier will.

2. Als Datenbank kommt bei uns eine betagte SQLBase 10 von Gupta zum
Einsatz, die immerhin ein Assembly für die Einbindung in .NET mitbringt.

Im Connectionstring muss ich eine SQL.INI übergeben, die u.a. Informtionen
über den Installationsort etc. enthàlt. Diese SQL.INI übergeben ich mit
dem kompletten Pfad: INI=c:\meininstallpfad\sql.ini;

Auch hier gilt: Im VS2005 Testserver funktioniert das problemlos. Auf dem
lokalen IIS streikt die Anwendung, weil die Assembly nicht ihre DLLs
findet. Ich nehme mal an, dass er seine SQL.INI nicht findet und daher
nicht weiß, wo er installiert ist.

Ich habe das auch mit einer Minimal-Anwendung in ASP.NET nachgestellt:
Verbindung aufbauen, ein Feld auslesen, Anzeigen. Sind keine 15 Zeilen
Code. Auf dem Testserver: kein Problem. Der IIS streikt auch hier wieder!

Ich bin mittlerweile echt ratlos. So extrem auseinander können Testserver
und IIS doch nicht sein. Mir ist schon klar, dass ich beim IIS mehr
konfigurieren muss und man nicht "eben so" eine Anwendung draufklatscht.
Aber bei den beiden o.g. Dingen bin ich jetzt nach 1 Woche inkl.
abendlicher Überstunden mit meinem Latein & den Nerven am Ende! :(

Ich würde mich darüber freuen, wenn mir jemand mal einen freundlichen
Klaps in die richtige Richtung gibt. Ich brauche ja keine Komplettlösung,
sondern vielleicht nur (wie immer) den richtigen Rat à la "Lies mal dort"
oder "Probier mal das".

Danke schonmal für's Lesen & hoffentlich auch die richtigen Antworten

Mit freundlichen Grüßen

Jürgen Kraus
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
12/09/2008 - 10:55 | Warnen spam
Hallo Jürgen,

"Jürgen Kraus" schrieb:

Wir haben jetzt nach gut einem 3/4 Jahr eine Anwendung unter VS2005 fà¼r ASP.NET 2.0 fertiggestellt.



vorab: Dann bist Du hier eigentlich falsch. Diese NG behandelt Classic ASP,
nicht ASP.NET. Für ASP.NET wàre die folgende Newsgroup besser geeignet:

microsoft.public.de.german.entwickler.dotnet.asp

Ich versuch aber trotzdem, hier zu helfen :)

Seit Anfang dieser Woche soll ich nun die Anwendung "Real life" tauglich machen und muss feststellen: Es là¤uft nicht!



Habt ihr lokal bei der Entwicklung mit dem Visual Studio Development Webserver
oder mit dem IIS getestet? Der Unterschied ist bspw. dass der in VS eingebaute
Webserver mit den Rechten des aktuellen Benuzer làuft, der IIS aber mit IUSR,
ASPNET, NETZWERKDIENST, ...

Sobald die Anwendung auf dem IIS-Server ist, funktioniert der Zugriff auf das COM-Objekt nicht mehr:

Die COM-Klassenfactory fà¼r die Komponente mit der CLSID ... konnte aufgrund des folgenden Fehlers nicht abgerufen werden:
80070005: UnauthorizedAccess.



Siehe bspw.:

http://support.microsoft.com/kb/278013
http://social.msdn.microsoft.com/fo...54abf38db/
http://forums.asp.net/p/1045732/146...px#1467231

Für IIS 7 solltest Du aber anstelle von ASPNET den Account NETZWERKDIENST,
bzw. NETWORK SERVICE mit den entsprechenden Rechten ausstatten. Wo liegt
denn die DLL, die ihr da einbinden wollt?

Führ auch mal DCOMCNFG aus und àndere die Einstellungen für die Komponente
(siehe Postings in den letzten beiden Links).

Na gut - ist ja logisch. Also mache ich das, was der Server mir vorschlà¤gt und vergebe Leserechte auf die COM-DLL fà¼r den User
ASPNET.



Das wàre aber IIRC nur für den XP IIS richtig.

Mehr als "Jeder darf alles" kann ich doch als Recht gar nicht vergeben?



Wenn Du mit "Jeder" die Accountzuordnung "Jeder", bzw. "Everyone" meinst,
dann muss ich dir sagen: "Jeder" ist nicht jeder :)

Was genau ihr da für wen einstellen müsst, hàngt von vielen Faktoren ab.
Zum einen mit dem Account, der den Application Pool ausführt (ab IIS 6),
ob ihr mit Impersonation arbeitet, ...

Im Connectionstring muss ich eine SQL.INI à¼bergeben, die u.a. Informtionen à¼ber den Installationsort etc. enthà¤lt. Diese
SQL.INI à¼bergeben ich mit dem kompletten Pfad: INI=c:\meininstallpfad\sql.ini;



Und hier hat der ausführende Benutzer auch entsprechende Rechte?

Auch hier gilt: Im VS2005 Testserver funktioniert das problemlos. Auf dem lokalen IIS streikt die Anwendung, weil die Assembly
nicht ihre DLLs findet.



Und wie lautet die Fehlermeldung?

Ich nehme mal an, dass er seine SQL.INI nicht findet und daher nicht weiàŸ, wo er installiert ist.



Das sollte sich eigentlich aus der Fehlermeldung ergeben. Zur Not kannst
Du auch mal mit FileMon prüfen, ob und wenn ja, welcher Zugriff hier
fehlschlàgt.

http://technet.microsoft.com/de-de/...96642.aspx

Ich bin mittlerweile echt ratlos. So extrem auseinander können Testserver und IIS doch nicht sein.



Doch, siehe oben. IIS làuft immer als Dienst, der ASP.NET Development
Webserver eben nicht. Da hast Du im Normalfall so ziemlich alle Rechte.
Daher empfehle ich auch meist, den IIS gleich bei der Entwicklung zu
verwenden.

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen