2009-12-03 9 views
0

Je viens de réinstaller un serveur, il s'agit d'une nouvelle machine, de la même version du système d'exploitation (Win2008) et de la même version IIS (7.0). L'application fonctionnait parfaitement (et puis la machine a explosé).ASP classique sur IIS7: erreur ADODB.Stream Impossible d'ouvrir le fichier - accès en dehors de la racine Web

Je reçois cette erreur lorsque je tente d'accéder à un fichier en dehors du Webroot:

erreur ADODB.Stream « 800a0bba » Le fichier n'a pas pu être ouvert

je peux y accéder en utilisant FileSystemObject bien, mais ne peut pas l'ouvrir avec ADODB.Stream.

En outre, je peux créer un PDF en utilisant abcPDF, mais je ne peux pas en créer un nouveau avec le même nom et l'écraser (cela marchait). Cela fonctionne très bien dans la structure du dossier du site mais pas à l'extérieur.

De plus, je ne peux plus joindre un fichier en utilisant JMail. Cela s'applique aux fichiers à l'intérieur et à l'extérieur de la racine Web. Donc c'est bizarre.

J'ai attribué un contrôle total à tout le monde sur l'ensemble du disque pour isoler s'il s'agit d'un problème d'autorisations et cela n'a fait aucune différence.

Vous avez des idées?

MISE À JOUR: Le problème de l'attachement de fichiers à l'intérieur du site ne semble plus se produire, puisque j'ai fait plusieurs choses. Je ne suis pas sûr de ce qu'il a fait malheureusement. Je n'ai rien trouvé et j'ai perdu des heures, alors j'ai fini par déplacer tous les fichiers dans le webroot et maintenant tout fonctionne. Ce n'est pas idéal et j'aimerais quand même aller au fond des choses, mais la solution est acceptable.

Mise à jour question comme je l'écrivais accidentellement Win2003 au lieu de 2008.

+0

Windows 2003/IIS6 ou Windows 2008/IIS7 qui? La configuration de Windows 2003/IIS7 n'est pas possible. – AnthonyWJones

+0

Oui, vous avez raison, c'est Windows 2008, désolé. –

Répondre

0

Le problème avec l'attachement de fichiers à l'intérieur du site ne semble plus se produire, puisque j'ai tourné autour de plusieurs choses. Je ne suis pas sûr de ce qu'il a fait malheureusement. Je n'ai rien trouvé et j'ai perdu des heures, alors j'ai fini par déplacer tous les fichiers dans le webroot et maintenant tout fonctionne. Ce n'est pas idéal et j'aimerais quand même aller au fond des choses, mais la solution est acceptable.

0

Vous avez probablement besoin de regarder de plus près les autorisations de sécurité sur les dossiers en dehors de votre dossier d'applications à domicile. Jetez également un coup d'œil à l'identité de l'utilisateur qui est réellement utilisée pour exécuter votre code, par exemple avez-vous activé la sécurité intégrée de Windows? Si non, est-ce vrai du serveur précédent?

Il peut être utile de savoir si c'est vraiment une question IIS7, auquel cas votre serveur est 2008 et non 2003. Vous pouvez également constater que ce genre de chose est mieux géré par les serverfault.com personnes.

+0

C'est Win2008 + IIS7. Comment puis-je vérifier sur la sécurité intégrée de Windows? –

1

Je pense que vous devriez vérifier dans votre base de données en premier lieu comment vous enregistrez le fichier PDF en question. C'est là que vous avez enregistré le fichier en question dans la base de données à partir de la même machine ou d'une machine distante. Habituellement, lorsque vous enregistrez à partir de la même machine de développement et que vous y accédez, il n'y aura pas d'erreur, mais lorsque le fichier a été sauvegardé à partir d'une machine autre que la machine de développement, vous aurez une telle erreur.

Par exemple:

'1. dbSignatureImage = New ADODB.Stream 
'2. dbSignatureImage.Type = ADODB.StreamTypeEnum.adTypeBinary 
'3. dbSignatureImage.Open() 
'4. dbSignatureImage. 

LoadFromFile(dbRecordSet.Fields("client_signature_filename").Value) 

À partir du code ci-dessus, je tentais d'afficher deux images différentes de la base de données (un à la fois) et parmi les deux images que je sauvé un directement à partir de la machine de développeur et l'autre image a été enregistrée à partir d'un autre PC sur mon réseau. Chaque fois que j'essaie d'afficher la deuxième image qui a été enregistrée à partir d'un PC de réseau, alors j'ai l'erreur de fichier n'a pas pu être ouvert. Maintenant, ce que j'ai fait était de commenter la 4ème ligne et l'erreur saisie mais l'image ne s'affichait pas alors j'ai essayé d'afficher l'image directement depuis le champ BLOB en utilisant IO.MemoryStream avec les codes suivants et ça fonctionne bien pour la machine du développeur et tout PC sur le réseau.

Dim PassportImageArray() As Byte = CType(dbRecordSet.Fields("client_passport_image").Value, Byte()) 
Dim SignatureImageArray() As Byte = CType(dbRecordSet.Fields("client_signature_image").Value, Byte()) 

Dim PassportImageMemoryStream As New MemoryStream(PassportImageArray) 
Dim SignatureImageMemoryStream As New MemoryStream(SignatureImageArray) 

With picSearchPhotograph 
.Image = Image.FromStream(PassportImageMemoryStream) 
.SizeMode = PictureBoxSizeMode.StretchImage 
.BorderStyle = BorderStyle.None 
End With 

Je pense que vous pouvez contourner votre problème avec cette petite idée. J'espère que ça vous va comment.

Kasapa-Sunyani