Bonjour,
J'ai un bout de code qui me permet de faire de l'upload avec un composant
upload ASP.Net.
Le code fonctionne très bien avec le serveur interne de VS.Net 2005, par
contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye de
lire
le fichier source.
Voici le code :
// Flux d'écriture du fichier sur le serveur
FileStream fs = new FileStream(this.p_filesNames[i],
FileMode.OpenOrCreate);
// Flux de lecture du fichier
BinaryReader br = new BinaryReader(file.InputStream);
try
{
// Tant qu'on a pas tout lu et qu'on ne doit pas stopper
while (br.BaseStream.Length - br.BaseStream.Position > 0 &&
!this.p_stopUpload)
{
// S'il y a moins d'octet a récupérér que la taille du
tampon
if (br.BaseStream.Length - br.BaseStream.Position <
bufferSize)
{
bufferSize = (int)(br.BaseStream.Length -
br.BaseStream.Position);
}
br.Read(buffer, 0, bufferSize); // lecture => il plante ici
!!!!!
fs.Write(buffer, 0, bufferSize); // écriture
this.p_totalUploaded += bufferSize;
this.p_partialUploaded = br.BaseStream.Position;
}
}
finally
{
// Fermeture des flux
br.Close();
fs.Close();
}
Et je peux vous assurer que le fichier que je veux uploader n'est pas
ouvert
ou utilisé par quelque chose.
Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko !!
Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
serveur
interne.
Quelle est dans IIS l'option qui déconne ?
Merci pour votre aide.
Bonjour,
J'ai un bout de code qui me permet de faire de l'upload avec un composant
upload ASP.Net.
Le code fonctionne très bien avec le serveur interne de VS.Net 2005, par
contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye de
lire
le fichier source.
Voici le code :
// Flux d'écriture du fichier sur le serveur
FileStream fs = new FileStream(this.p_filesNames[i],
FileMode.OpenOrCreate);
// Flux de lecture du fichier
BinaryReader br = new BinaryReader(file.InputStream);
try
{
// Tant qu'on a pas tout lu et qu'on ne doit pas stopper
while (br.BaseStream.Length - br.BaseStream.Position > 0 &&
!this.p_stopUpload)
{
// S'il y a moins d'octet a récupérér que la taille du
tampon
if (br.BaseStream.Length - br.BaseStream.Position <
bufferSize)
{
bufferSize = (int)(br.BaseStream.Length -
br.BaseStream.Position);
}
br.Read(buffer, 0, bufferSize); // lecture => il plante ici
!!!!!
fs.Write(buffer, 0, bufferSize); // écriture
this.p_totalUploaded += bufferSize;
this.p_partialUploaded = br.BaseStream.Position;
}
}
finally
{
// Fermeture des flux
br.Close();
fs.Close();
}
Et je peux vous assurer que le fichier que je veux uploader n'est pas
ouvert
ou utilisé par quelque chose.
Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko !!
Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
serveur
interne.
Quelle est dans IIS l'option qui déconne ?
Merci pour votre aide.
Bonjour,
J'ai un bout de code qui me permet de faire de l'upload avec un composant
upload ASP.Net.
Le code fonctionne très bien avec le serveur interne de VS.Net 2005, par
contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye de
lire
le fichier source.
Voici le code :
// Flux d'écriture du fichier sur le serveur
FileStream fs = new FileStream(this.p_filesNames[i],
FileMode.OpenOrCreate);
// Flux de lecture du fichier
BinaryReader br = new BinaryReader(file.InputStream);
try
{
// Tant qu'on a pas tout lu et qu'on ne doit pas stopper
while (br.BaseStream.Length - br.BaseStream.Position > 0 &&
!this.p_stopUpload)
{
// S'il y a moins d'octet a récupérér que la taille du
tampon
if (br.BaseStream.Length - br.BaseStream.Position <
bufferSize)
{
bufferSize = (int)(br.BaseStream.Length -
br.BaseStream.Position);
}
br.Read(buffer, 0, bufferSize); // lecture => il plante ici
!!!!!
fs.Write(buffer, 0, bufferSize); // écriture
this.p_totalUploaded += bufferSize;
this.p_partialUploaded = br.BaseStream.Position;
}
}
finally
{
// Fermeture des flux
br.Close();
fs.Close();
}
Et je peux vous assurer que le fichier que je veux uploader n'est pas
ouvert
ou utilisé par quelque chose.
Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko !!
Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
serveur
interne.
Quelle est dans IIS l'option qui déconne ?
Merci pour votre aide.
Le Fri, 22 Jun 2007 17:39:03 +0200, David
a écrit:
> Bonjour,
>
> J'ai un bout de code qui me permet de faire de l'upload avec un composant
> upload ASP.Net.
> Le code fonctionne très bien avec le serveur interne de VS.Net 2005, par
> contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye de
> lire
> le fichier source.
>
> Voici le code :
> // Flux d'écriture du fichier sur le serveur
> FileStream fs = new FileStream(this.p_filesNames[i],
> FileMode.OpenOrCreate);
>
> // Flux de lecture du fichier
> BinaryReader br = new BinaryReader(file.InputStream);
> try
> {
> // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
> while (br.BaseStream.Length - br.BaseStream.Position > 0 &&
> !this.p_stopUpload)
> {
>
> // S'il y a moins d'octet a récupérér que la taille du
> tampon
> if (br.BaseStream.Length - br.BaseStream.Position <
> bufferSize)
> {
> bufferSize = (int)(br.BaseStream.Length -
> br.BaseStream.Position);
> }
>
> br.Read(buffer, 0, bufferSize); // lecture => il plante ici
> !!!!!
> fs.Write(buffer, 0, bufferSize); // écriture
> this.p_totalUploaded += bufferSize;
> this.p_partialUploaded = br.BaseStream.Position;
> }
> }
> finally
> {
> // Fermeture des flux
> br.Close();
> fs.Close();
> }
>
> Et je peux vous assurer que le fichier que je veux uploader n'est pas
> ouvert
> ou utilisé par quelque chose.
> Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko !!
> Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
> serveur
> interne.
> Quelle est dans IIS l'option qui déconne ?
>
> Merci pour votre aide.
Peux-tu poster le code concernant l'utilisation de la variable : file
Cordialement
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Fri, 22 Jun 2007 17:39:03 +0200, David
<David@discussions.microsoft.com> a écrit:
> Bonjour,
>
> J'ai un bout de code qui me permet de faire de l'upload avec un composant
> upload ASP.Net.
> Le code fonctionne très bien avec le serveur interne de VS.Net 2005, par
> contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye de
> lire
> le fichier source.
>
> Voici le code :
> // Flux d'écriture du fichier sur le serveur
> FileStream fs = new FileStream(this.p_filesNames[i],
> FileMode.OpenOrCreate);
>
> // Flux de lecture du fichier
> BinaryReader br = new BinaryReader(file.InputStream);
> try
> {
> // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
> while (br.BaseStream.Length - br.BaseStream.Position > 0 &&
> !this.p_stopUpload)
> {
>
> // S'il y a moins d'octet a récupérér que la taille du
> tampon
> if (br.BaseStream.Length - br.BaseStream.Position <
> bufferSize)
> {
> bufferSize = (int)(br.BaseStream.Length -
> br.BaseStream.Position);
> }
>
> br.Read(buffer, 0, bufferSize); // lecture => il plante ici
> !!!!!
> fs.Write(buffer, 0, bufferSize); // écriture
> this.p_totalUploaded += bufferSize;
> this.p_partialUploaded = br.BaseStream.Position;
> }
> }
> finally
> {
> // Fermeture des flux
> br.Close();
> fs.Close();
> }
>
> Et je peux vous assurer que le fichier que je veux uploader n'est pas
> ouvert
> ou utilisé par quelque chose.
> Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko !!
> Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
> serveur
> interne.
> Quelle est dans IIS l'option qui déconne ?
>
> Merci pour votre aide.
Peux-tu poster le code concernant l'utilisation de la variable : file
Cordialement
--
Gilles TOURREAU
gilles.tourreau@pos.fr
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Fri, 22 Jun 2007 17:39:03 +0200, David
a écrit:
> Bonjour,
>
> J'ai un bout de code qui me permet de faire de l'upload avec un composant
> upload ASP.Net.
> Le code fonctionne très bien avec le serveur interne de VS.Net 2005, par
> contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye de
> lire
> le fichier source.
>
> Voici le code :
> // Flux d'écriture du fichier sur le serveur
> FileStream fs = new FileStream(this.p_filesNames[i],
> FileMode.OpenOrCreate);
>
> // Flux de lecture du fichier
> BinaryReader br = new BinaryReader(file.InputStream);
> try
> {
> // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
> while (br.BaseStream.Length - br.BaseStream.Position > 0 &&
> !this.p_stopUpload)
> {
>
> // S'il y a moins d'octet a récupérér que la taille du
> tampon
> if (br.BaseStream.Length - br.BaseStream.Position <
> bufferSize)
> {
> bufferSize = (int)(br.BaseStream.Length -
> br.BaseStream.Position);
> }
>
> br.Read(buffer, 0, bufferSize); // lecture => il plante ici
> !!!!!
> fs.Write(buffer, 0, bufferSize); // écriture
> this.p_totalUploaded += bufferSize;
> this.p_partialUploaded = br.BaseStream.Position;
> }
> }
> finally
> {
> // Fermeture des flux
> br.Close();
> fs.Close();
> }
>
> Et je peux vous assurer que le fichier que je veux uploader n'est pas
> ouvert
> ou utilisé par quelque chose.
> Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko !!
> Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
> serveur
> interne.
> Quelle est dans IIS l'option qui déconne ?
>
> Merci pour votre aide.
Peux-tu poster le code concernant l'utilisation de la variable : file
Cordialement
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
En fait, je boucle sur plusieurs fichiers à uploader :
HttpFileCollection p_files = Request.Files;
for (int i = 0; i < this.p_files.Count; i++)
{
HttpPostedFile file = this.p_files[i];
... Le code vu plus bas ...
}
--
David
"Gilles TOURREAU" a écrit :Le Fri, 22 Jun 2007 17:39:03 +0200, David
a écrit:
> Bonjour,
>
> J'ai un bout de code qui me permet de faire de l'upload avec un
composant
> upload ASP.Net.
> Le code fonctionne très bien avec le serveur interne de VS.Net 2005,
par
> contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye de
> lire
> le fichier source.
>
> Voici le code :
> // Flux d'écriture du fichier sur le serveur
> FileStream fs = new FileStream(this.p_filesNames[i],
> FileMode.OpenOrCreate);
>
> // Flux de lecture du fichier
> BinaryReader br = new BinaryReader(file.InputStream);
> try
> {
> // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
> while (br.BaseStream.Length - br.BaseStream.Position > 0
&&
> !this.p_stopUpload)
> {
>
> // S'il y a moins d'octet a récupérér que la taille du
> tampon
> if (br.BaseStream.Length - br.BaseStream.Position <
> bufferSize)
> {
> bufferSize = (int)(br.BaseStream.Length -
> br.BaseStream.Position);
> }
>
> br.Read(buffer, 0, bufferSize); // lecture => il plante
ici
> !!!!!
> fs.Write(buffer, 0, bufferSize); // écriture
> this.p_totalUploaded += bufferSize;
> this.p_partialUploaded = br.BaseStream.Position;
> }
> }
> finally
> {
> // Fermeture des flux
> br.Close();
> fs.Close();
> }
>
> Et je peux vous assurer que le fichier que je veux uploader n'est pas
> ouvert
> ou utilisé par quelque chose.
> Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko
!!
> Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
> serveur
> interne.
> Quelle est dans IIS l'option qui déconne ?
>
> Merci pour votre aide.
Peux-tu poster le code concernant l'utilisation de la variable : file
Cordialement
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
En fait, je boucle sur plusieurs fichiers à uploader :
HttpFileCollection p_files = Request.Files;
for (int i = 0; i < this.p_files.Count; i++)
{
HttpPostedFile file = this.p_files[i];
... Le code vu plus bas ...
}
--
David
"Gilles TOURREAU" a écrit :
Le Fri, 22 Jun 2007 17:39:03 +0200, David
<David@discussions.microsoft.com> a écrit:
> Bonjour,
>
> J'ai un bout de code qui me permet de faire de l'upload avec un
composant
> upload ASP.Net.
> Le code fonctionne très bien avec le serveur interne de VS.Net 2005,
par
> contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye de
> lire
> le fichier source.
>
> Voici le code :
> // Flux d'écriture du fichier sur le serveur
> FileStream fs = new FileStream(this.p_filesNames[i],
> FileMode.OpenOrCreate);
>
> // Flux de lecture du fichier
> BinaryReader br = new BinaryReader(file.InputStream);
> try
> {
> // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
> while (br.BaseStream.Length - br.BaseStream.Position > 0
&&
> !this.p_stopUpload)
> {
>
> // S'il y a moins d'octet a récupérér que la taille du
> tampon
> if (br.BaseStream.Length - br.BaseStream.Position <
> bufferSize)
> {
> bufferSize = (int)(br.BaseStream.Length -
> br.BaseStream.Position);
> }
>
> br.Read(buffer, 0, bufferSize); // lecture => il plante
ici
> !!!!!
> fs.Write(buffer, 0, bufferSize); // écriture
> this.p_totalUploaded += bufferSize;
> this.p_partialUploaded = br.BaseStream.Position;
> }
> }
> finally
> {
> // Fermeture des flux
> br.Close();
> fs.Close();
> }
>
> Et je peux vous assurer que le fichier que je veux uploader n'est pas
> ouvert
> ou utilisé par quelque chose.
> Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko
!!
> Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
> serveur
> interne.
> Quelle est dans IIS l'option qui déconne ?
>
> Merci pour votre aide.
Peux-tu poster le code concernant l'utilisation de la variable : file
Cordialement
--
Gilles TOURREAU
gilles.tourreau@pos.fr
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
En fait, je boucle sur plusieurs fichiers à uploader :
HttpFileCollection p_files = Request.Files;
for (int i = 0; i < this.p_files.Count; i++)
{
HttpPostedFile file = this.p_files[i];
... Le code vu plus bas ...
}
--
David
"Gilles TOURREAU" a écrit :Le Fri, 22 Jun 2007 17:39:03 +0200, David
a écrit:
> Bonjour,
>
> J'ai un bout de code qui me permet de faire de l'upload avec un
composant
> upload ASP.Net.
> Le code fonctionne très bien avec le serveur interne de VS.Net 2005,
par
> contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye de
> lire
> le fichier source.
>
> Voici le code :
> // Flux d'écriture du fichier sur le serveur
> FileStream fs = new FileStream(this.p_filesNames[i],
> FileMode.OpenOrCreate);
>
> // Flux de lecture du fichier
> BinaryReader br = new BinaryReader(file.InputStream);
> try
> {
> // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
> while (br.BaseStream.Length - br.BaseStream.Position > 0
&&
> !this.p_stopUpload)
> {
>
> // S'il y a moins d'octet a récupérér que la taille du
> tampon
> if (br.BaseStream.Length - br.BaseStream.Position <
> bufferSize)
> {
> bufferSize = (int)(br.BaseStream.Length -
> br.BaseStream.Position);
> }
>
> br.Read(buffer, 0, bufferSize); // lecture => il plante
ici
> !!!!!
> fs.Write(buffer, 0, bufferSize); // écriture
> this.p_totalUploaded += bufferSize;
> this.p_partialUploaded = br.BaseStream.Position;
> }
> }
> finally
> {
> // Fermeture des flux
> br.Close();
> fs.Close();
> }
>
> Et je peux vous assurer que le fichier que je veux uploader n'est pas
> ouvert
> ou utilisé par quelque chose.
> Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko
!!
> Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
> serveur
> interne.
> Quelle est dans IIS l'option qui déconne ?
>
> Merci pour votre aide.
Peux-tu poster le code concernant l'utilisation de la variable : file
Cordialement
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Fri, 22 Jun 2007 18:23:05 +0200, David
a écrit:En fait, je boucle sur plusieurs fichiers à uploader :
HttpFileCollection p_files = Request.Files;
for (int i = 0; i < this.p_files.Count; i++)
{
HttpPostedFile file = this.p_files[i];
... Le code vu plus bas ...
}
--
David
"Gilles TOURREAU" a écrit :Le Fri, 22 Jun 2007 17:39:03 +0200, David
a écrit:
> Bonjour,
>
> J'ai un bout de code qui me permet de faire de l'upload avec un
composant
> upload ASP.Net.
> Le code fonctionne très bien avec le serveur interne de VS.Net 2005,
par
> contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye
de
> lire
> le fichier source.
>
> Voici le code :
> // Flux d'écriture du fichier sur le serveur
> FileStream fs = new FileStream(this.p_filesNames[i],
> FileMode.OpenOrCreate);
>
> // Flux de lecture du fichier
> BinaryReader br = new BinaryReader(file.InputStream);
> try
> {
> // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
> while (br.BaseStream.Length - br.BaseStream.Position > 0
&&
> !this.p_stopUpload)
> {
>
> // S'il y a moins d'octet a récupérér que la taille du
> tampon
> if (br.BaseStream.Length - br.BaseStream.Position <
> bufferSize)
> {
> bufferSize = (int)(br.BaseStream.Length -
> br.BaseStream.Position);
> }
>
> br.Read(buffer, 0, bufferSize); // lecture => il
plante ici
> !!!!!
> fs.Write(buffer, 0, bufferSize); // écriture
> this.p_totalUploaded += bufferSize;
> this.p_partialUploaded = br.BaseStream.Position;
> }
> }
> finally
> {
> // Fermeture des flux
> br.Close();
> fs.Close();
> }
>
> Et je peux vous assurer que le fichier que je veux uploader n'est pas
> ouvert
> ou utilisé par quelque chose.
> Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko
!!
> Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
> serveur
> interne.
> Quelle est dans IIS l'option qui déconne ?
>
> Merci pour votre aide.
Peux-tu poster le code concernant l'utilisation de la variable : file
Cordialement
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Je vois pas où il y aurait un problème...
Cette exception est déclenché uniquement dans le cas ou vous appelez la
méthode Close() ou Dispose() du BinaryReader et après un Read().
Essayez cependant cette solution qui est bien meilleur que le
try/finally :
using (FileStream fs = new FileStream(this.p_filesNames[i],
FileMode.OpenOrCreate))
{
using (BinaryReader br = new BinaryReader(file.InputStream))
{
//... Le code
//Inutile de faire un close à la fin des using, car la méthode
Dispose est automatiquement libéré...
}
}
Cordialement
Le Fri, 22 Jun 2007 18:23:05 +0200, David
<David@discussions.microsoft.com> a écrit:
En fait, je boucle sur plusieurs fichiers à uploader :
HttpFileCollection p_files = Request.Files;
for (int i = 0; i < this.p_files.Count; i++)
{
HttpPostedFile file = this.p_files[i];
... Le code vu plus bas ...
}
--
David
"Gilles TOURREAU" a écrit :
Le Fri, 22 Jun 2007 17:39:03 +0200, David
<David@discussions.microsoft.com> a écrit:
> Bonjour,
>
> J'ai un bout de code qui me permet de faire de l'upload avec un
composant
> upload ASP.Net.
> Le code fonctionne très bien avec le serveur interne de VS.Net 2005,
par
> contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye
de
> lire
> le fichier source.
>
> Voici le code :
> // Flux d'écriture du fichier sur le serveur
> FileStream fs = new FileStream(this.p_filesNames[i],
> FileMode.OpenOrCreate);
>
> // Flux de lecture du fichier
> BinaryReader br = new BinaryReader(file.InputStream);
> try
> {
> // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
> while (br.BaseStream.Length - br.BaseStream.Position > 0
&&
> !this.p_stopUpload)
> {
>
> // S'il y a moins d'octet a récupérér que la taille du
> tampon
> if (br.BaseStream.Length - br.BaseStream.Position <
> bufferSize)
> {
> bufferSize = (int)(br.BaseStream.Length -
> br.BaseStream.Position);
> }
>
> br.Read(buffer, 0, bufferSize); // lecture => il
plante ici
> !!!!!
> fs.Write(buffer, 0, bufferSize); // écriture
> this.p_totalUploaded += bufferSize;
> this.p_partialUploaded = br.BaseStream.Position;
> }
> }
> finally
> {
> // Fermeture des flux
> br.Close();
> fs.Close();
> }
>
> Et je peux vous assurer que le fichier que je veux uploader n'est pas
> ouvert
> ou utilisé par quelque chose.
> Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko
!!
> Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
> serveur
> interne.
> Quelle est dans IIS l'option qui déconne ?
>
> Merci pour votre aide.
Peux-tu poster le code concernant l'utilisation de la variable : file
Cordialement
--
Gilles TOURREAU
gilles.tourreau@pos.fr
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Je vois pas où il y aurait un problème...
Cette exception est déclenché uniquement dans le cas ou vous appelez la
méthode Close() ou Dispose() du BinaryReader et après un Read().
Essayez cependant cette solution qui est bien meilleur que le
try/finally :
using (FileStream fs = new FileStream(this.p_filesNames[i],
FileMode.OpenOrCreate))
{
using (BinaryReader br = new BinaryReader(file.InputStream))
{
//... Le code
//Inutile de faire un close à la fin des using, car la méthode
Dispose est automatiquement libéré...
}
}
Cordialement
Le Fri, 22 Jun 2007 18:23:05 +0200, David
a écrit:En fait, je boucle sur plusieurs fichiers à uploader :
HttpFileCollection p_files = Request.Files;
for (int i = 0; i < this.p_files.Count; i++)
{
HttpPostedFile file = this.p_files[i];
... Le code vu plus bas ...
}
--
David
"Gilles TOURREAU" a écrit :Le Fri, 22 Jun 2007 17:39:03 +0200, David
a écrit:
> Bonjour,
>
> J'ai un bout de code qui me permet de faire de l'upload avec un
composant
> upload ASP.Net.
> Le code fonctionne très bien avec le serveur interne de VS.Net 2005,
par
> contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye
de
> lire
> le fichier source.
>
> Voici le code :
> // Flux d'écriture du fichier sur le serveur
> FileStream fs = new FileStream(this.p_filesNames[i],
> FileMode.OpenOrCreate);
>
> // Flux de lecture du fichier
> BinaryReader br = new BinaryReader(file.InputStream);
> try
> {
> // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
> while (br.BaseStream.Length - br.BaseStream.Position > 0
&&
> !this.p_stopUpload)
> {
>
> // S'il y a moins d'octet a récupérér que la taille du
> tampon
> if (br.BaseStream.Length - br.BaseStream.Position <
> bufferSize)
> {
> bufferSize = (int)(br.BaseStream.Length -
> br.BaseStream.Position);
> }
>
> br.Read(buffer, 0, bufferSize); // lecture => il
plante ici
> !!!!!
> fs.Write(buffer, 0, bufferSize); // écriture
> this.p_totalUploaded += bufferSize;
> this.p_partialUploaded = br.BaseStream.Position;
> }
> }
> finally
> {
> // Fermeture des flux
> br.Close();
> fs.Close();
> }
>
> Et je peux vous assurer que le fichier que je veux uploader n'est pas
> ouvert
> ou utilisé par quelque chose.
> Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko
!!
> Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
> serveur
> interne.
> Quelle est dans IIS l'option qui déconne ?
>
> Merci pour votre aide.
Peux-tu poster le code concernant l'utilisation de la variable : file
Cordialement
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Je vois pas où il y aurait un problème...
Cette exception est déclenché uniquement dans le cas ou vous appelez la
méthode Close() ou Dispose() du BinaryReader et après un Read().
Essayez cependant cette solution qui est bien meilleur que le
try/finally :
using (FileStream fs = new FileStream(this.p_filesNames[i],
FileMode.OpenOrCreate))
{
using (BinaryReader br = new BinaryReader(file.InputStream))
{
//... Le code
//Inutile de faire un close à la fin des using, car la méthode
Dispose est automatiquement libéré...
}
}
Cordialement
Le Fri, 22 Jun 2007 20:00:41 +0200, Gilles TOURREAU
a écrit:
> Le Fri, 22 Jun 2007 18:23:05 +0200, David
> a écrit:
>
>> En fait, je boucle sur plusieurs fichiers à uploader :
>> HttpFileCollection p_files = Request.Files;
>> for (int i = 0; i < this.p_files.Count; i++)
>> {
>> HttpPostedFile file = this.p_files[i];
>> ... Le code vu plus bas ...
>> }
>>
>> --
>> David
>>
>> "Gilles TOURREAU" a écrit :
>>
>>> Le Fri, 22 Jun 2007 17:39:03 +0200, David
>>> a écrit:
>>>
>>> > Bonjour,
>>> >
>>> > J'ai un bout de code qui me permet de faire de l'upload avec un
>>> composant
>>> > upload ASP.Net.
>>> > Le code fonctionne très bien avec le serveur interne de VS.Net 2005,
>>> par
>>> > contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye
>>> de
>>> > lire
>>> > le fichier source.
>>> >
>>> > Voici le code :
>>> > // Flux d'écriture du fichier sur le serveur
>>> > FileStream fs = new FileStream(this.p_filesNames[i],
>>> > FileMode.OpenOrCreate);
>>> >
>>> > // Flux de lecture du fichier
>>> > BinaryReader br = new BinaryReader(file.InputStream);
>>> > try
>>> > {
>>> > // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
>>> > while (br.BaseStream.Length - br.BaseStream.Position > 0
>>> &&
>>> > !this.p_stopUpload)
>>> > {
>>> >
>>> > // S'il y a moins d'octet a récupérér que la taille du
>>> > tampon
>>> > if (br.BaseStream.Length - br.BaseStream.Position <
>>> > bufferSize)
>>> > {
>>> > bufferSize = (int)(br.BaseStream.Length -
>>> > br.BaseStream.Position);
>>> > }
>>> >
>>> > br.Read(buffer, 0, bufferSize); // lecture => il
>>> plante ici
>>> > !!!!!
>>> > fs.Write(buffer, 0, bufferSize); // écriture
>>> > this.p_totalUploaded += bufferSize;
>>> > this.p_partialUploaded = br.BaseStream.Position;
>>> > }
>>> > }
>>> > finally
>>> > {
>>> > // Fermeture des flux
>>> > br.Close();
>>> > fs.Close();
>>> > }
>>> >
>>> > Et je peux vous assurer que le fichier que je veux uploader n'est pas
>>> > ouvert
>>> > ou utilisé par quelque chose.
>>> > Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko
>>> !!
>>> > Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
>>> > serveur
>>> > interne.
>>> > Quelle est dans IIS l'option qui déconne ?
>>> >
>>> > Merci pour votre aide.
>>>
>>> Peux-tu poster le code concernant l'utilisation de la variable : file
>>>
>>> Cordialement
>>>
>>> --
>>> Gilles TOURREAU
>>>
>>>
>>> S.A.R.L. P.O.S
>>> Le spécialiste en motoculture depuis + de 30 ans !
>>> http://www.pos.fr
>>>
>
> Je vois pas où il y aurait un problème...
> Cette exception est déclenché uniquement dans le cas ou vous appelez la
> méthode Close() ou Dispose() du BinaryReader et après un Read().
>
> Essayez cependant cette solution qui est bien meilleur que le
> try/finally :
>
> using (FileStream fs = new FileStream(this.p_filesNames[i],
> FileMode.OpenOrCreate))
> {
> using (BinaryReader br = new BinaryReader(file.InputStream))
> {
> //... Le code
>
> //Inutile de faire un close à la fin des using, car la méthode
> Dispose est automatiquement libéré...
> }
> }
>
> Cordialement
>
>
Je viens de remarquer un truc interessant sur un de mes sites ASP...
Quand le site "plante" (evenement Application_Error déclenché dans
Global.asax), .NET libère toutes les ressources de toutes les demandes en
cours en appellant la méthode Dispose() de tous les objets...
Peut-être un début de piste pour toi :
- Est-ce que ton site internet sur le IIS est utilisé par plusieurs
utilisateurs en même temps ?
- Si c'est le cas, cela veut dire qu'au moment du plantage, .NET appelle
la méthode Dispose() de ton file.InputStream....
Cordialement
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Fri, 22 Jun 2007 20:00:41 +0200, Gilles TOURREAU
<gilles.tourreau@pos.fr> a écrit:
> Le Fri, 22 Jun 2007 18:23:05 +0200, David
> <David@discussions.microsoft.com> a écrit:
>
>> En fait, je boucle sur plusieurs fichiers à uploader :
>> HttpFileCollection p_files = Request.Files;
>> for (int i = 0; i < this.p_files.Count; i++)
>> {
>> HttpPostedFile file = this.p_files[i];
>> ... Le code vu plus bas ...
>> }
>>
>> --
>> David
>>
>> "Gilles TOURREAU" a écrit :
>>
>>> Le Fri, 22 Jun 2007 17:39:03 +0200, David
>>> <David@discussions.microsoft.com> a écrit:
>>>
>>> > Bonjour,
>>> >
>>> > J'ai un bout de code qui me permet de faire de l'upload avec un
>>> composant
>>> > upload ASP.Net.
>>> > Le code fonctionne très bien avec le serveur interne de VS.Net 2005,
>>> par
>>> > contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye
>>> de
>>> > lire
>>> > le fichier source.
>>> >
>>> > Voici le code :
>>> > // Flux d'écriture du fichier sur le serveur
>>> > FileStream fs = new FileStream(this.p_filesNames[i],
>>> > FileMode.OpenOrCreate);
>>> >
>>> > // Flux de lecture du fichier
>>> > BinaryReader br = new BinaryReader(file.InputStream);
>>> > try
>>> > {
>>> > // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
>>> > while (br.BaseStream.Length - br.BaseStream.Position > 0
>>> &&
>>> > !this.p_stopUpload)
>>> > {
>>> >
>>> > // S'il y a moins d'octet a récupérér que la taille du
>>> > tampon
>>> > if (br.BaseStream.Length - br.BaseStream.Position <
>>> > bufferSize)
>>> > {
>>> > bufferSize = (int)(br.BaseStream.Length -
>>> > br.BaseStream.Position);
>>> > }
>>> >
>>> > br.Read(buffer, 0, bufferSize); // lecture => il
>>> plante ici
>>> > !!!!!
>>> > fs.Write(buffer, 0, bufferSize); // écriture
>>> > this.p_totalUploaded += bufferSize;
>>> > this.p_partialUploaded = br.BaseStream.Position;
>>> > }
>>> > }
>>> > finally
>>> > {
>>> > // Fermeture des flux
>>> > br.Close();
>>> > fs.Close();
>>> > }
>>> >
>>> > Et je peux vous assurer que le fichier que je veux uploader n'est pas
>>> > ouvert
>>> > ou utilisé par quelque chose.
>>> > Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko
>>> !!
>>> > Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
>>> > serveur
>>> > interne.
>>> > Quelle est dans IIS l'option qui déconne ?
>>> >
>>> > Merci pour votre aide.
>>>
>>> Peux-tu poster le code concernant l'utilisation de la variable : file
>>>
>>> Cordialement
>>>
>>> --
>>> Gilles TOURREAU
>>> gilles.tourreau@pos.fr
>>>
>>> S.A.R.L. P.O.S
>>> Le spécialiste en motoculture depuis + de 30 ans !
>>> http://www.pos.fr
>>>
>
> Je vois pas où il y aurait un problème...
> Cette exception est déclenché uniquement dans le cas ou vous appelez la
> méthode Close() ou Dispose() du BinaryReader et après un Read().
>
> Essayez cependant cette solution qui est bien meilleur que le
> try/finally :
>
> using (FileStream fs = new FileStream(this.p_filesNames[i],
> FileMode.OpenOrCreate))
> {
> using (BinaryReader br = new BinaryReader(file.InputStream))
> {
> //... Le code
>
> //Inutile de faire un close à la fin des using, car la méthode
> Dispose est automatiquement libéré...
> }
> }
>
> Cordialement
>
>
Je viens de remarquer un truc interessant sur un de mes sites ASP...
Quand le site "plante" (evenement Application_Error déclenché dans
Global.asax), .NET libère toutes les ressources de toutes les demandes en
cours en appellant la méthode Dispose() de tous les objets...
Peut-être un début de piste pour toi :
- Est-ce que ton site internet sur le IIS est utilisé par plusieurs
utilisateurs en même temps ?
- Si c'est le cas, cela veut dire qu'au moment du plantage, .NET appelle
la méthode Dispose() de ton file.InputStream....
Cordialement
--
Gilles TOURREAU
gilles.tourreau@pos.fr
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Fri, 22 Jun 2007 20:00:41 +0200, Gilles TOURREAU
a écrit:
> Le Fri, 22 Jun 2007 18:23:05 +0200, David
> a écrit:
>
>> En fait, je boucle sur plusieurs fichiers à uploader :
>> HttpFileCollection p_files = Request.Files;
>> for (int i = 0; i < this.p_files.Count; i++)
>> {
>> HttpPostedFile file = this.p_files[i];
>> ... Le code vu plus bas ...
>> }
>>
>> --
>> David
>>
>> "Gilles TOURREAU" a écrit :
>>
>>> Le Fri, 22 Jun 2007 17:39:03 +0200, David
>>> a écrit:
>>>
>>> > Bonjour,
>>> >
>>> > J'ai un bout de code qui me permet de faire de l'upload avec un
>>> composant
>>> > upload ASP.Net.
>>> > Le code fonctionne très bien avec le serveur interne de VS.Net 2005,
>>> par
>>> > contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye
>>> de
>>> > lire
>>> > le fichier source.
>>> >
>>> > Voici le code :
>>> > // Flux d'écriture du fichier sur le serveur
>>> > FileStream fs = new FileStream(this.p_filesNames[i],
>>> > FileMode.OpenOrCreate);
>>> >
>>> > // Flux de lecture du fichier
>>> > BinaryReader br = new BinaryReader(file.InputStream);
>>> > try
>>> > {
>>> > // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
>>> > while (br.BaseStream.Length - br.BaseStream.Position > 0
>>> &&
>>> > !this.p_stopUpload)
>>> > {
>>> >
>>> > // S'il y a moins d'octet a récupérér que la taille du
>>> > tampon
>>> > if (br.BaseStream.Length - br.BaseStream.Position <
>>> > bufferSize)
>>> > {
>>> > bufferSize = (int)(br.BaseStream.Length -
>>> > br.BaseStream.Position);
>>> > }
>>> >
>>> > br.Read(buffer, 0, bufferSize); // lecture => il
>>> plante ici
>>> > !!!!!
>>> > fs.Write(buffer, 0, bufferSize); // écriture
>>> > this.p_totalUploaded += bufferSize;
>>> > this.p_partialUploaded = br.BaseStream.Position;
>>> > }
>>> > }
>>> > finally
>>> > {
>>> > // Fermeture des flux
>>> > br.Close();
>>> > fs.Close();
>>> > }
>>> >
>>> > Et je peux vous assurer que le fichier que je veux uploader n'est pas
>>> > ouvert
>>> > ou utilisé par quelque chose.
>>> > Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko
>>> !!
>>> > Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
>>> > serveur
>>> > interne.
>>> > Quelle est dans IIS l'option qui déconne ?
>>> >
>>> > Merci pour votre aide.
>>>
>>> Peux-tu poster le code concernant l'utilisation de la variable : file
>>>
>>> Cordialement
>>>
>>> --
>>> Gilles TOURREAU
>>>
>>>
>>> S.A.R.L. P.O.S
>>> Le spécialiste en motoculture depuis + de 30 ans !
>>> http://www.pos.fr
>>>
>
> Je vois pas où il y aurait un problème...
> Cette exception est déclenché uniquement dans le cas ou vous appelez la
> méthode Close() ou Dispose() du BinaryReader et après un Read().
>
> Essayez cependant cette solution qui est bien meilleur que le
> try/finally :
>
> using (FileStream fs = new FileStream(this.p_filesNames[i],
> FileMode.OpenOrCreate))
> {
> using (BinaryReader br = new BinaryReader(file.InputStream))
> {
> //... Le code
>
> //Inutile de faire un close à la fin des using, car la méthode
> Dispose est automatiquement libéré...
> }
> }
>
> Cordialement
>
>
Je viens de remarquer un truc interessant sur un de mes sites ASP...
Quand le site "plante" (evenement Application_Error déclenché dans
Global.asax), .NET libère toutes les ressources de toutes les demandes en
cours en appellant la méthode Dispose() de tous les objets...
Peut-être un début de piste pour toi :
- Est-ce que ton site internet sur le IIS est utilisé par plusieurs
utilisateurs en même temps ?
- Si c'est le cas, cela veut dire qu'au moment du plantage, .NET appelle
la méthode Dispose() de ton file.InputStream....
Cordialement
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Fri, 22 Jun 2007 20:00:41 +0200, Gilles TOURREAU
a écrit:
> Le Fri, 22 Jun 2007 18:23:05 +0200, David
> a écrit:
>
>> En fait, je boucle sur plusieurs fichiers à uploader :
>> HttpFileCollection p_files = Request.Files;
>> for (int i = 0; i < this.p_files.Count; i++)
>> {
>> HttpPostedFile file = this.p_files[i];
>> ... Le code vu plus bas ...
>> }
>>
>> --
>> David
>>
>> "Gilles TOURREAU" a écrit :
>>
>>> Le Fri, 22 Jun 2007 17:39:03 +0200, David
>>> a écrit:
>>>
>>> > Bonjour,
>>> >
>>> > J'ai un bout de code qui me permet de faire de l'upload avec un
>>> composant
>>> > upload ASP.Net.
>>> > Le code fonctionne très bien avec le serveur interne de VS.Net 2005,
>>> par
>>> > contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye
>>> de
>>> > lire
>>> > le fichier source.
>>> >
>>> > Voici le code :
>>> > // Flux d'écriture du fichier sur le serveur
>>> > FileStream fs = new FileStream(this.p_filesNames[i],
>>> > FileMode.OpenOrCreate);
>>> >
>>> > // Flux de lecture du fichier
>>> > BinaryReader br = new BinaryReader(file.InputStream);
>>> > try
>>> > {
>>> > // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
>>> > while (br.BaseStream.Length - br.BaseStream.Position > 0
>>> &&
>>> > !this.p_stopUpload)
>>> > {
>>> >
>>> > // S'il y a moins d'octet a récupérér que la taille du
>>> > tampon
>>> > if (br.BaseStream.Length - br.BaseStream.Position <
>>> > bufferSize)
>>> > {
>>> > bufferSize = (int)(br.BaseStream.Length -
>>> > br.BaseStream.Position);
>>> > }
>>> >
>>> > br.Read(buffer, 0, bufferSize); // lecture => il
>>> plante ici
>>> > !!!!!
>>> > fs.Write(buffer, 0, bufferSize); // écriture
>>> > this.p_totalUploaded += bufferSize;
>>> > this.p_partialUploaded = br.BaseStream.Position;
>>> > }
>>> > }
>>> > finally
>>> > {
>>> > // Fermeture des flux
>>> > br.Close();
>>> > fs.Close();
>>> > }
>>> >
>>> > Et je peux vous assurer que le fichier que je veux uploader n'est pas
>>> > ouvert
>>> > ou utilisé par quelque chose.
>>> > Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko
>>> !!
>>> > Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
>>> > serveur
>>> > interne.
>>> > Quelle est dans IIS l'option qui déconne ?
>>> >
>>> > Merci pour votre aide.
>>>
>>> Peux-tu poster le code concernant l'utilisation de la variable : file
>>>
>>> Cordialement
>>>
>>> --
>>> Gilles TOURREAU
>>>
>>>
>>> S.A.R.L. P.O.S
>>> Le spécialiste en motoculture depuis + de 30 ans !
>>> http://www.pos.fr
>>>
>
> Je vois pas où il y aurait un problème...
> Cette exception est déclenché uniquement dans le cas ou vous appelez la
> méthode Close() ou Dispose() du BinaryReader et après un Read().
>
> Essayez cependant cette solution qui est bien meilleur que le
> try/finally :
>
> using (FileStream fs = new FileStream(this.p_filesNames[i],
> FileMode.OpenOrCreate))
> {
> using (BinaryReader br = new BinaryReader(file.InputStream))
> {
> //... Le code
>
> //Inutile de faire un close à la fin des using, car la méthode
> Dispose est automatiquement libéré...
> }
> }
>
> Cordialement
>
>
Je viens de remarquer un truc interessant sur un de mes sites ASP...
Quand le site "plante" (evenement Application_Error déclenché dans
Global.asax), .NET libère toutes les ressources de toutes les demandes en
cours en appellant la méthode Dispose() de tous les objets...
Peut-être un début de piste pour toi :
- Est-ce que ton site internet sur le IIS est utilisé par plusieurs
utilisateurs en même temps ?
- Si c'est le cas, cela veut dire qu'au moment du plantage, .NET appelle
la méthode Dispose() de ton file.InputStream....
Cordialement
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Fri, 22 Jun 2007 20:00:41 +0200, Gilles TOURREAU
<gilles.tourreau@pos.fr> a écrit:
> Le Fri, 22 Jun 2007 18:23:05 +0200, David
> <David@discussions.microsoft.com> a écrit:
>
>> En fait, je boucle sur plusieurs fichiers à uploader :
>> HttpFileCollection p_files = Request.Files;
>> for (int i = 0; i < this.p_files.Count; i++)
>> {
>> HttpPostedFile file = this.p_files[i];
>> ... Le code vu plus bas ...
>> }
>>
>> --
>> David
>>
>> "Gilles TOURREAU" a écrit :
>>
>>> Le Fri, 22 Jun 2007 17:39:03 +0200, David
>>> <David@discussions.microsoft.com> a écrit:
>>>
>>> > Bonjour,
>>> >
>>> > J'ai un bout de code qui me permet de faire de l'upload avec un
>>> composant
>>> > upload ASP.Net.
>>> > Le code fonctionne très bien avec le serveur interne de VS.Net 2005,
>>> par
>>> > contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye
>>> de
>>> > lire
>>> > le fichier source.
>>> >
>>> > Voici le code :
>>> > // Flux d'écriture du fichier sur le serveur
>>> > FileStream fs = new FileStream(this.p_filesNames[i],
>>> > FileMode.OpenOrCreate);
>>> >
>>> > // Flux de lecture du fichier
>>> > BinaryReader br = new BinaryReader(file.InputStream);
>>> > try
>>> > {
>>> > // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
>>> > while (br.BaseStream.Length - br.BaseStream.Position > 0
>>> &&
>>> > !this.p_stopUpload)
>>> > {
>>> >
>>> > // S'il y a moins d'octet a récupérér que la taille du
>>> > tampon
>>> > if (br.BaseStream.Length - br.BaseStream.Position <
>>> > bufferSize)
>>> > {
>>> > bufferSize = (int)(br.BaseStream.Length -
>>> > br.BaseStream.Position);
>>> > }
>>> >
>>> > br.Read(buffer, 0, bufferSize); // lecture => il
>>> plante ici
>>> > !!!!!
>>> > fs.Write(buffer, 0, bufferSize); // écriture
>>> > this.p_totalUploaded += bufferSize;
>>> > this.p_partialUploaded = br.BaseStream.Position;
>>> > }
>>> > }
>>> > finally
>>> > {
>>> > // Fermeture des flux
>>> > br.Close();
>>> > fs.Close();
>>> > }
>>> >
>>> > Et je peux vous assurer que le fichier que je veux uploader n'est pas
>>> > ouvert
>>> > ou utilisé par quelque chose.
>>> > Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko
>>> !!
>>> > Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
>>> > serveur
>>> > interne.
>>> > Quelle est dans IIS l'option qui déconne ?
>>> >
>>> > Merci pour votre aide.
>>>
>>> Peux-tu poster le code concernant l'utilisation de la variable : file
>>>
>>> Cordialement
>>>
>>> --
>>> Gilles TOURREAU
>>> gilles.tourreau@pos.fr
>>>
>>> S.A.R.L. P.O.S
>>> Le spécialiste en motoculture depuis + de 30 ans !
>>> http://www.pos.fr
>>>
>
> Je vois pas où il y aurait un problème...
> Cette exception est déclenché uniquement dans le cas ou vous appelez la
> méthode Close() ou Dispose() du BinaryReader et après un Read().
>
> Essayez cependant cette solution qui est bien meilleur que le
> try/finally :
>
> using (FileStream fs = new FileStream(this.p_filesNames[i],
> FileMode.OpenOrCreate))
> {
> using (BinaryReader br = new BinaryReader(file.InputStream))
> {
> //... Le code
>
> //Inutile de faire un close à la fin des using, car la méthode
> Dispose est automatiquement libéré...
> }
> }
>
> Cordialement
>
>
Je viens de remarquer un truc interessant sur un de mes sites ASP...
Quand le site "plante" (evenement Application_Error déclenché dans
Global.asax), .NET libère toutes les ressources de toutes les demandes en
cours en appellant la méthode Dispose() de tous les objets...
Peut-être un début de piste pour toi :
- Est-ce que ton site internet sur le IIS est utilisé par plusieurs
utilisateurs en même temps ?
- Si c'est le cas, cela veut dire qu'au moment du plantage, .NET appelle
la méthode Dispose() de ton file.InputStream....
Cordialement
--
Gilles TOURREAU
gilles.tourreau@pos.fr
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Fri, 22 Jun 2007 20:00:41 +0200, Gilles TOURREAU
a écrit:
> Le Fri, 22 Jun 2007 18:23:05 +0200, David
> a écrit:
>
>> En fait, je boucle sur plusieurs fichiers à uploader :
>> HttpFileCollection p_files = Request.Files;
>> for (int i = 0; i < this.p_files.Count; i++)
>> {
>> HttpPostedFile file = this.p_files[i];
>> ... Le code vu plus bas ...
>> }
>>
>> --
>> David
>>
>> "Gilles TOURREAU" a écrit :
>>
>>> Le Fri, 22 Jun 2007 17:39:03 +0200, David
>>> a écrit:
>>>
>>> > Bonjour,
>>> >
>>> > J'ai un bout de code qui me permet de faire de l'upload avec un
>>> composant
>>> > upload ASP.Net.
>>> > Le code fonctionne très bien avec le serveur interne de VS.Net 2005,
>>> par
>>> > contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye
>>> de
>>> > lire
>>> > le fichier source.
>>> >
>>> > Voici le code :
>>> > // Flux d'écriture du fichier sur le serveur
>>> > FileStream fs = new FileStream(this.p_filesNames[i],
>>> > FileMode.OpenOrCreate);
>>> >
>>> > // Flux de lecture du fichier
>>> > BinaryReader br = new BinaryReader(file.InputStream);
>>> > try
>>> > {
>>> > // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
>>> > while (br.BaseStream.Length - br.BaseStream.Position > 0
>>> &&
>>> > !this.p_stopUpload)
>>> > {
>>> >
>>> > // S'il y a moins d'octet a récupérér que la taille du
>>> > tampon
>>> > if (br.BaseStream.Length - br.BaseStream.Position <
>>> > bufferSize)
>>> > {
>>> > bufferSize = (int)(br.BaseStream.Length -
>>> > br.BaseStream.Position);
>>> > }
>>> >
>>> > br.Read(buffer, 0, bufferSize); // lecture => il
>>> plante ici
>>> > !!!!!
>>> > fs.Write(buffer, 0, bufferSize); // écriture
>>> > this.p_totalUploaded += bufferSize;
>>> > this.p_partialUploaded = br.BaseStream.Position;
>>> > }
>>> > }
>>> > finally
>>> > {
>>> > // Fermeture des flux
>>> > br.Close();
>>> > fs.Close();
>>> > }
>>> >
>>> > Et je peux vous assurer que le fichier que je veux uploader n'est pas
>>> > ouvert
>>> > ou utilisé par quelque chose.
>>> > Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko
>>> !!
>>> > Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
>>> > serveur
>>> > interne.
>>> > Quelle est dans IIS l'option qui déconne ?
>>> >
>>> > Merci pour votre aide.
>>>
>>> Peux-tu poster le code concernant l'utilisation de la variable : file
>>>
>>> Cordialement
>>>
>>> --
>>> Gilles TOURREAU
>>>
>>>
>>> S.A.R.L. P.O.S
>>> Le spécialiste en motoculture depuis + de 30 ans !
>>> http://www.pos.fr
>>>
>
> Je vois pas où il y aurait un problème...
> Cette exception est déclenché uniquement dans le cas ou vous appelez la
> méthode Close() ou Dispose() du BinaryReader et après un Read().
>
> Essayez cependant cette solution qui est bien meilleur que le
> try/finally :
>
> using (FileStream fs = new FileStream(this.p_filesNames[i],
> FileMode.OpenOrCreate))
> {
> using (BinaryReader br = new BinaryReader(file.InputStream))
> {
> //... Le code
>
> //Inutile de faire un close à la fin des using, car la méthode
> Dispose est automatiquement libéré...
> }
> }
>
> Cordialement
>
>
Je viens de remarquer un truc interessant sur un de mes sites ASP...
Quand le site "plante" (evenement Application_Error déclenché dans
Global.asax), .NET libère toutes les ressources de toutes les demandes en
cours en appellant la méthode Dispose() de tous les objets...
Peut-être un début de piste pour toi :
- Est-ce que ton site internet sur le IIS est utilisé par plusieurs
utilisateurs en même temps ?
- Si c'est le cas, cela veut dire qu'au moment du plantage, .NET appelle
la méthode Dispose() de ton file.InputStream....
Cordialement
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Pour info, je suis seul à utiliser le site (en dev actuellement) et je suis
donc en local également.
"Gilles TOURREAU" a écrit :
> Le Fri, 22 Jun 2007 20:00:41 +0200, Gilles TOURREAU
> a écrit:
>
> > Le Fri, 22 Jun 2007 18:23:05 +0200, David
> > a écrit:
> >
> >> En fait, je boucle sur plusieurs fichiers à uploader :
> >> HttpFileCollection p_files = Request.Files;
> >> for (int i = 0; i < this.p_files.Count; i++)
> >> {
> >> HttpPostedFile file = this.p_files[i];
> >> ... Le code vu plus bas ...
> >> }
> >>
> >> --
> >> David
> >>
> >> "Gilles TOURREAU" a écrit :
> >>
> >>> Le Fri, 22 Jun 2007 17:39:03 +0200, David
> >>> a écrit:
> >>>
> >>> > Bonjour,
> >>> >
> >>> > J'ai un bout de code qui me permet de faire de l'upload avec un
> >>> composant
> >>> > upload ASP.Net.
> >>> > Le code fonctionne très bien avec le serveur interne de VS.Net 2005,
> >>> par
> >>> > contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye
> >>> de
> >>> > lire
> >>> > le fichier source.
> >>> >
> >>> > Voici le code :
> >>> > // Flux d'écriture du fichier sur le serveur
> >>> > FileStream fs = new FileStream(this.p_filesNames[i],
> >>> > FileMode.OpenOrCreate);
> >>> >
> >>> > // Flux de lecture du fichier
> >>> > BinaryReader br = new BinaryReader(file.InputStream);
> >>> > try
> >>> > {
> >>> > // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
> >>> > while (br.BaseStream.Length - br.BaseStream.Position > 0
> >>> &&
> >>> > !this.p_stopUpload)
> >>> > {
> >>> >
> >>> > // S'il y a moins d'octet a récupérér que la taille du
> >>> > tampon
> >>> > if (br.BaseStream.Length - br.BaseStream.Position <
> >>> > bufferSize)
> >>> > {
> >>> > bufferSize = (int)(br.BaseStream.Length -
> >>> > br.BaseStream.Position);
> >>> > }
> >>> >
> >>> > br.Read(buffer, 0, bufferSize); // lecture => il
> >>> plante ici
> >>> > !!!!!
> >>> > fs.Write(buffer, 0, bufferSize); // écriture
> >>> > this.p_totalUploaded += bufferSize;
> >>> > this.p_partialUploaded = br.BaseStream.Position;
> >>> > }
> >>> > }
> >>> > finally
> >>> > {
> >>> > // Fermeture des flux
> >>> > br.Close();
> >>> > fs.Close();
> >>> > }
> >>> >
> >>> > Et je peux vous assurer que le fichier que je veux uploader n'est pas
> >>> > ouvert
> >>> > ou utilisé par quelque chose.
> >>> > Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko
> >>> !!
> >>> > Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
> >>> > serveur
> >>> > interne.
> >>> > Quelle est dans IIS l'option qui déconne ?
> >>> >
> >>> > Merci pour votre aide.
> >>>
> >>> Peux-tu poster le code concernant l'utilisation de la variable : file
> >>>
> >>> Cordialement
> >>>
> >>> --
> >>> Gilles TOURREAU
> >>>
> >>>
> >>> S.A.R.L. P.O.S
> >>> Le spécialiste en motoculture depuis + de 30 ans !
> >>> http://www.pos.fr
> >>>
> >
> > Je vois pas où il y aurait un problème...
> > Cette exception est déclenché uniquement dans le cas ou vous appelez la
> > méthode Close() ou Dispose() du BinaryReader et après un Read().
> >
> > Essayez cependant cette solution qui est bien meilleur que le
> > try/finally :
> >
> > using (FileStream fs = new FileStream(this.p_filesNames[i],
> > FileMode.OpenOrCreate))
> > {
> > using (BinaryReader br = new BinaryReader(file.InputStream))
> > {
> > //... Le code
> >
> > //Inutile de faire un close à la fin des using, car la méthode
> > Dispose est automatiquement libéré...
> > }
> > }
> >
> > Cordialement
> >
> >
>
> Je viens de remarquer un truc interessant sur un de mes sites ASP...
> Quand le site "plante" (evenement Application_Error déclenché dans
> Global.asax), .NET libère toutes les ressources de toutes les demandes en
> cours en appellant la méthode Dispose() de tous les objets...
>
> Peut-être un début de piste pour toi :
> - Est-ce que ton site internet sur le IIS est utilisé par plusieurs
> utilisateurs en même temps ?
> - Si c'est le cas, cela veut dire qu'au moment du plantage, .NET appelle
> la méthode Dispose() de ton file.InputStream....
>
> Cordialement
>
> --
> Gilles TOURREAU
>
>
> S.A.R.L. P.O.S
> Le spécialiste en motoculture depuis + de 30 ans !
> http://www.pos.fr
>
Pour info, je suis seul à utiliser le site (en dev actuellement) et je suis
donc en local également.
"Gilles TOURREAU" a écrit :
> Le Fri, 22 Jun 2007 20:00:41 +0200, Gilles TOURREAU
> <gilles.tourreau@pos.fr> a écrit:
>
> > Le Fri, 22 Jun 2007 18:23:05 +0200, David
> > <David@discussions.microsoft.com> a écrit:
> >
> >> En fait, je boucle sur plusieurs fichiers à uploader :
> >> HttpFileCollection p_files = Request.Files;
> >> for (int i = 0; i < this.p_files.Count; i++)
> >> {
> >> HttpPostedFile file = this.p_files[i];
> >> ... Le code vu plus bas ...
> >> }
> >>
> >> --
> >> David
> >>
> >> "Gilles TOURREAU" a écrit :
> >>
> >>> Le Fri, 22 Jun 2007 17:39:03 +0200, David
> >>> <David@discussions.microsoft.com> a écrit:
> >>>
> >>> > Bonjour,
> >>> >
> >>> > J'ai un bout de code qui me permet de faire de l'upload avec un
> >>> composant
> >>> > upload ASP.Net.
> >>> > Le code fonctionne très bien avec le serveur interne de VS.Net 2005,
> >>> par
> >>> > contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye
> >>> de
> >>> > lire
> >>> > le fichier source.
> >>> >
> >>> > Voici le code :
> >>> > // Flux d'écriture du fichier sur le serveur
> >>> > FileStream fs = new FileStream(this.p_filesNames[i],
> >>> > FileMode.OpenOrCreate);
> >>> >
> >>> > // Flux de lecture du fichier
> >>> > BinaryReader br = new BinaryReader(file.InputStream);
> >>> > try
> >>> > {
> >>> > // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
> >>> > while (br.BaseStream.Length - br.BaseStream.Position > 0
> >>> &&
> >>> > !this.p_stopUpload)
> >>> > {
> >>> >
> >>> > // S'il y a moins d'octet a récupérér que la taille du
> >>> > tampon
> >>> > if (br.BaseStream.Length - br.BaseStream.Position <
> >>> > bufferSize)
> >>> > {
> >>> > bufferSize = (int)(br.BaseStream.Length -
> >>> > br.BaseStream.Position);
> >>> > }
> >>> >
> >>> > br.Read(buffer, 0, bufferSize); // lecture => il
> >>> plante ici
> >>> > !!!!!
> >>> > fs.Write(buffer, 0, bufferSize); // écriture
> >>> > this.p_totalUploaded += bufferSize;
> >>> > this.p_partialUploaded = br.BaseStream.Position;
> >>> > }
> >>> > }
> >>> > finally
> >>> > {
> >>> > // Fermeture des flux
> >>> > br.Close();
> >>> > fs.Close();
> >>> > }
> >>> >
> >>> > Et je peux vous assurer que le fichier que je veux uploader n'est pas
> >>> > ouvert
> >>> > ou utilisé par quelque chose.
> >>> > Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko
> >>> !!
> >>> > Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
> >>> > serveur
> >>> > interne.
> >>> > Quelle est dans IIS l'option qui déconne ?
> >>> >
> >>> > Merci pour votre aide.
> >>>
> >>> Peux-tu poster le code concernant l'utilisation de la variable : file
> >>>
> >>> Cordialement
> >>>
> >>> --
> >>> Gilles TOURREAU
> >>> gilles.tourreau@pos.fr
> >>>
> >>> S.A.R.L. P.O.S
> >>> Le spécialiste en motoculture depuis + de 30 ans !
> >>> http://www.pos.fr
> >>>
> >
> > Je vois pas où il y aurait un problème...
> > Cette exception est déclenché uniquement dans le cas ou vous appelez la
> > méthode Close() ou Dispose() du BinaryReader et après un Read().
> >
> > Essayez cependant cette solution qui est bien meilleur que le
> > try/finally :
> >
> > using (FileStream fs = new FileStream(this.p_filesNames[i],
> > FileMode.OpenOrCreate))
> > {
> > using (BinaryReader br = new BinaryReader(file.InputStream))
> > {
> > //... Le code
> >
> > //Inutile de faire un close à la fin des using, car la méthode
> > Dispose est automatiquement libéré...
> > }
> > }
> >
> > Cordialement
> >
> >
>
> Je viens de remarquer un truc interessant sur un de mes sites ASP...
> Quand le site "plante" (evenement Application_Error déclenché dans
> Global.asax), .NET libère toutes les ressources de toutes les demandes en
> cours en appellant la méthode Dispose() de tous les objets...
>
> Peut-être un début de piste pour toi :
> - Est-ce que ton site internet sur le IIS est utilisé par plusieurs
> utilisateurs en même temps ?
> - Si c'est le cas, cela veut dire qu'au moment du plantage, .NET appelle
> la méthode Dispose() de ton file.InputStream....
>
> Cordialement
>
> --
> Gilles TOURREAU
> gilles.tourreau@pos.fr
>
> S.A.R.L. P.O.S
> Le spécialiste en motoculture depuis + de 30 ans !
> http://www.pos.fr
>
Pour info, je suis seul à utiliser le site (en dev actuellement) et je suis
donc en local également.
"Gilles TOURREAU" a écrit :
> Le Fri, 22 Jun 2007 20:00:41 +0200, Gilles TOURREAU
> a écrit:
>
> > Le Fri, 22 Jun 2007 18:23:05 +0200, David
> > a écrit:
> >
> >> En fait, je boucle sur plusieurs fichiers à uploader :
> >> HttpFileCollection p_files = Request.Files;
> >> for (int i = 0; i < this.p_files.Count; i++)
> >> {
> >> HttpPostedFile file = this.p_files[i];
> >> ... Le code vu plus bas ...
> >> }
> >>
> >> --
> >> David
> >>
> >> "Gilles TOURREAU" a écrit :
> >>
> >>> Le Fri, 22 Jun 2007 17:39:03 +0200, David
> >>> a écrit:
> >>>
> >>> > Bonjour,
> >>> >
> >>> > J'ai un bout de code qui me permet de faire de l'upload avec un
> >>> composant
> >>> > upload ASP.Net.
> >>> > Le code fonctionne très bien avec le serveur interne de VS.Net 2005,
> >>> par
> >>> > contre avec IIS 5 il me génère un IODisposedObject lorsque j'essaye
> >>> de
> >>> > lire
> >>> > le fichier source.
> >>> >
> >>> > Voici le code :
> >>> > // Flux d'écriture du fichier sur le serveur
> >>> > FileStream fs = new FileStream(this.p_filesNames[i],
> >>> > FileMode.OpenOrCreate);
> >>> >
> >>> > // Flux de lecture du fichier
> >>> > BinaryReader br = new BinaryReader(file.InputStream);
> >>> > try
> >>> > {
> >>> > // Tant qu'on a pas tout lu et qu'on ne doit pas stopper
> >>> > while (br.BaseStream.Length - br.BaseStream.Position > 0
> >>> &&
> >>> > !this.p_stopUpload)
> >>> > {
> >>> >
> >>> > // S'il y a moins d'octet a récupérér que la taille du
> >>> > tampon
> >>> > if (br.BaseStream.Length - br.BaseStream.Position <
> >>> > bufferSize)
> >>> > {
> >>> > bufferSize = (int)(br.BaseStream.Length -
> >>> > br.BaseStream.Position);
> >>> > }
> >>> >
> >>> > br.Read(buffer, 0, bufferSize); // lecture => il
> >>> plante ici
> >>> > !!!!!
> >>> > fs.Write(buffer, 0, bufferSize); // écriture
> >>> > this.p_totalUploaded += bufferSize;
> >>> > this.p_partialUploaded = br.BaseStream.Position;
> >>> > }
> >>> > }
> >>> > finally
> >>> > {
> >>> > // Fermeture des flux
> >>> > br.Close();
> >>> > fs.Close();
> >>> > }
> >>> >
> >>> > Et je peux vous assurer que le fichier que je veux uploader n'est pas
> >>> > ouvert
> >>> > ou utilisé par quelque chose.
> >>> > Par contre, j'ai remarqué que ça fonctionne pour des fichier < 64 Ko
> >>> !!
> >>> > Encore une fois, pour des gros fichiers, ça fonctionne avec le petit
> >>> > serveur
> >>> > interne.
> >>> > Quelle est dans IIS l'option qui déconne ?
> >>> >
> >>> > Merci pour votre aide.
> >>>
> >>> Peux-tu poster le code concernant l'utilisation de la variable : file
> >>>
> >>> Cordialement
> >>>
> >>> --
> >>> Gilles TOURREAU
> >>>
> >>>
> >>> S.A.R.L. P.O.S
> >>> Le spécialiste en motoculture depuis + de 30 ans !
> >>> http://www.pos.fr
> >>>
> >
> > Je vois pas où il y aurait un problème...
> > Cette exception est déclenché uniquement dans le cas ou vous appelez la
> > méthode Close() ou Dispose() du BinaryReader et après un Read().
> >
> > Essayez cependant cette solution qui est bien meilleur que le
> > try/finally :
> >
> > using (FileStream fs = new FileStream(this.p_filesNames[i],
> > FileMode.OpenOrCreate))
> > {
> > using (BinaryReader br = new BinaryReader(file.InputStream))
> > {
> > //... Le code
> >
> > //Inutile de faire un close à la fin des using, car la méthode
> > Dispose est automatiquement libéré...
> > }
> > }
> >
> > Cordialement
> >
> >
>
> Je viens de remarquer un truc interessant sur un de mes sites ASP...
> Quand le site "plante" (evenement Application_Error déclenché dans
> Global.asax), .NET libère toutes les ressources de toutes les demandes en
> cours en appellant la méthode Dispose() de tous les objets...
>
> Peut-être un début de piste pour toi :
> - Est-ce que ton site internet sur le IIS est utilisé par plusieurs
> utilisateurs en même temps ?
> - Si c'est le cas, cela veut dire qu'au moment du plantage, .NET appelle
> la méthode Dispose() de ton file.InputStream....
>
> Cordialement
>
> --
> Gilles TOURREAU
>
>
> S.A.R.L. P.O.S
> Le spécialiste en motoculture depuis + de 30 ans !
> http://www.pos.fr
>
En fait, je viens de faire des tests :
Si j'exécute le code directement sur le OnClick d'un bouton, ça
fonctionne
nickel même avec IIS !
Par contre, dans mon cas, je lance le traitement dans un thread.
Et apparemment, c'est de là que vient le pb.
En fait, je récupère la liste des fichiers dans un HttpFileCollection.
J'instancie une classe (Uploading) en lui mettant cette liste de
fichiers en
paramètre.
Si j'exécute directement dans le constructeur de ma classe, ça fonctionne
bien.
Par contre, dans mon constructeur :
- J'instancie une variable global (p_files) de type HttpFileCollection,
en
mettant p_Files = Files (paramètre reçu dans ma classe)
- je lance un thread (sans paramètre).
Ce thread démarre et exploite la variable globale p_files.
Voici en gros le code de mon constructeur :
public Uploading(HttpFileCollection files, ...)
{
this.p_files = files;
// Création et lancement du thread
Thread upThread = new Thread(new ThreadStart(GetData));
upThread.Start();
}
Le code précédent se trouve dans GetData.
Dans mon cas, c'est bel et bien la variable p_files qui poserait pb car
le
f_files[0].InputStream ne peut pas être lu.
Est-ce que je m'y prend mal pour créer mon thread et dans la gestion des
variables ?
Merci...
--
David
En fait, je viens de faire des tests :
Si j'exécute le code directement sur le OnClick d'un bouton, ça
fonctionne
nickel même avec IIS !
Par contre, dans mon cas, je lance le traitement dans un thread.
Et apparemment, c'est de là que vient le pb.
En fait, je récupère la liste des fichiers dans un HttpFileCollection.
J'instancie une classe (Uploading) en lui mettant cette liste de
fichiers en
paramètre.
Si j'exécute directement dans le constructeur de ma classe, ça fonctionne
bien.
Par contre, dans mon constructeur :
- J'instancie une variable global (p_files) de type HttpFileCollection,
en
mettant p_Files = Files (paramètre reçu dans ma classe)
- je lance un thread (sans paramètre).
Ce thread démarre et exploite la variable globale p_files.
Voici en gros le code de mon constructeur :
public Uploading(HttpFileCollection files, ...)
{
this.p_files = files;
// Création et lancement du thread
Thread upThread = new Thread(new ThreadStart(GetData));
upThread.Start();
}
Le code précédent se trouve dans GetData.
Dans mon cas, c'est bel et bien la variable p_files qui poserait pb car
le
f_files[0].InputStream ne peut pas être lu.
Est-ce que je m'y prend mal pour créer mon thread et dans la gestion des
variables ?
Merci...
--
David
En fait, je viens de faire des tests :
Si j'exécute le code directement sur le OnClick d'un bouton, ça
fonctionne
nickel même avec IIS !
Par contre, dans mon cas, je lance le traitement dans un thread.
Et apparemment, c'est de là que vient le pb.
En fait, je récupère la liste des fichiers dans un HttpFileCollection.
J'instancie une classe (Uploading) en lui mettant cette liste de
fichiers en
paramètre.
Si j'exécute directement dans le constructeur de ma classe, ça fonctionne
bien.
Par contre, dans mon constructeur :
- J'instancie une variable global (p_files) de type HttpFileCollection,
en
mettant p_Files = Files (paramètre reçu dans ma classe)
- je lance un thread (sans paramètre).
Ce thread démarre et exploite la variable globale p_files.
Voici en gros le code de mon constructeur :
public Uploading(HttpFileCollection files, ...)
{
this.p_files = files;
// Création et lancement du thread
Thread upThread = new Thread(new ThreadStart(GetData));
upThread.Start();
}
Le code précédent se trouve dans GetData.
Dans mon cas, c'est bel et bien la variable p_files qui poserait pb car
le
f_files[0].InputStream ne peut pas être lu.
Est-ce que je m'y prend mal pour créer mon thread et dans la gestion des
variables ?
Merci...
--
David
Le Sat, 23 Jun 2007 00:31:01 +0200, David
a écrit:
> En fait, je viens de faire des tests :
> Si j'exécute le code directement sur le OnClick d'un bouton, ça
> fonctionne
> nickel même avec IIS !
> Par contre, dans mon cas, je lance le traitement dans un thread.
> Et apparemment, c'est de là que vient le pb.
>
> En fait, je récupère la liste des fichiers dans un HttpFileCollection.
> J'instancie une classe (Uploading) en lui mettant cette liste de
> fichiers en
> paramètre.
> Si j'exécute directement dans le constructeur de ma classe, ça fonctionne
> bien.
>
> Par contre, dans mon constructeur :
> - J'instancie une variable global (p_files) de type HttpFileCollection,
> en
> mettant p_Files = Files (paramètre reçu dans ma classe)
> - je lance un thread (sans paramètre).
> Ce thread démarre et exploite la variable globale p_files.
>
> Voici en gros le code de mon constructeur :
> public Uploading(HttpFileCollection files, ...)
> {
> this.p_files = files;
> // Création et lancement du thread
> Thread upThread = new Thread(new ThreadStart(GetData));
> upThread.Start();
> }
>
> Le code précédent se trouve dans GetData.
>
> Dans mon cas, c'est bel et bien la variable p_files qui poserait pb car
> le
> f_files[0].InputStream ne peut pas être lu.
> Est-ce que je m'y prend mal pour créer mon thread et dans la gestion des
> variables ?
>
> Merci...
> --
> David
Non...
Je viens de faire un test qui ressemble à ce que tu souhaites (avec un
Thread) et cela fonctionne nickel...
Ce qui me chiffonne, c'est que ton erreur vient uniquement du fait que la
méthode Dispose() (ou Close()) de ton BinaryReader est appelé par
quelqu'un...
Ce que tu peux faire :
- Créer une classe MonBR qui hérite de BinaryReader
- Met le constructeur :
public MonBR(Stream s) : base(s)
{
}
- Tu "override" la méthode "protected Dispose()" :
protected override Dispose(boolean disposing)
{
//Ici on créer une fichier log qui enregistre la pile d'appel
using (StreamWriter w = new StreamWriter("C:MonLog.txt"))
//ATTENTION au droit !!!
{
w.WriteLine(Environment.StackTrace);
}
base.Dispose(disposing);
}
Utilise maintenant cette nouvelle classe pour lire ton fichier...
Executes ton site Web sur IIS avec les fichiers .PDB cela te permettra
d'obtenir les n° de ligne au niveau de pile.
Et tu nous fais un zoli copier/coller du contenu de ce fichier quand ca
plante !
Cordialement
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Sat, 23 Jun 2007 00:31:01 +0200, David
<David@discussions.microsoft.com> a écrit:
> En fait, je viens de faire des tests :
> Si j'exécute le code directement sur le OnClick d'un bouton, ça
> fonctionne
> nickel même avec IIS !
> Par contre, dans mon cas, je lance le traitement dans un thread.
> Et apparemment, c'est de là que vient le pb.
>
> En fait, je récupère la liste des fichiers dans un HttpFileCollection.
> J'instancie une classe (Uploading) en lui mettant cette liste de
> fichiers en
> paramètre.
> Si j'exécute directement dans le constructeur de ma classe, ça fonctionne
> bien.
>
> Par contre, dans mon constructeur :
> - J'instancie une variable global (p_files) de type HttpFileCollection,
> en
> mettant p_Files = Files (paramètre reçu dans ma classe)
> - je lance un thread (sans paramètre).
> Ce thread démarre et exploite la variable globale p_files.
>
> Voici en gros le code de mon constructeur :
> public Uploading(HttpFileCollection files, ...)
> {
> this.p_files = files;
> // Création et lancement du thread
> Thread upThread = new Thread(new ThreadStart(GetData));
> upThread.Start();
> }
>
> Le code précédent se trouve dans GetData.
>
> Dans mon cas, c'est bel et bien la variable p_files qui poserait pb car
> le
> f_files[0].InputStream ne peut pas être lu.
> Est-ce que je m'y prend mal pour créer mon thread et dans la gestion des
> variables ?
>
> Merci...
> --
> David
Non...
Je viens de faire un test qui ressemble à ce que tu souhaites (avec un
Thread) et cela fonctionne nickel...
Ce qui me chiffonne, c'est que ton erreur vient uniquement du fait que la
méthode Dispose() (ou Close()) de ton BinaryReader est appelé par
quelqu'un...
Ce que tu peux faire :
- Créer une classe MonBR qui hérite de BinaryReader
- Met le constructeur :
public MonBR(Stream s) : base(s)
{
}
- Tu "override" la méthode "protected Dispose()" :
protected override Dispose(boolean disposing)
{
//Ici on créer une fichier log qui enregistre la pile d'appel
using (StreamWriter w = new StreamWriter("C:\MonLog.txt"))
//ATTENTION au droit !!!
{
w.WriteLine(Environment.StackTrace);
}
base.Dispose(disposing);
}
Utilise maintenant cette nouvelle classe pour lire ton fichier...
Executes ton site Web sur IIS avec les fichiers .PDB cela te permettra
d'obtenir les n° de ligne au niveau de pile.
Et tu nous fais un zoli copier/coller du contenu de ce fichier quand ca
plante !
Cordialement
--
Gilles TOURREAU
gilles.tourreau@pos.fr
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Sat, 23 Jun 2007 00:31:01 +0200, David
a écrit:
> En fait, je viens de faire des tests :
> Si j'exécute le code directement sur le OnClick d'un bouton, ça
> fonctionne
> nickel même avec IIS !
> Par contre, dans mon cas, je lance le traitement dans un thread.
> Et apparemment, c'est de là que vient le pb.
>
> En fait, je récupère la liste des fichiers dans un HttpFileCollection.
> J'instancie une classe (Uploading) en lui mettant cette liste de
> fichiers en
> paramètre.
> Si j'exécute directement dans le constructeur de ma classe, ça fonctionne
> bien.
>
> Par contre, dans mon constructeur :
> - J'instancie une variable global (p_files) de type HttpFileCollection,
> en
> mettant p_Files = Files (paramètre reçu dans ma classe)
> - je lance un thread (sans paramètre).
> Ce thread démarre et exploite la variable globale p_files.
>
> Voici en gros le code de mon constructeur :
> public Uploading(HttpFileCollection files, ...)
> {
> this.p_files = files;
> // Création et lancement du thread
> Thread upThread = new Thread(new ThreadStart(GetData));
> upThread.Start();
> }
>
> Le code précédent se trouve dans GetData.
>
> Dans mon cas, c'est bel et bien la variable p_files qui poserait pb car
> le
> f_files[0].InputStream ne peut pas être lu.
> Est-ce que je m'y prend mal pour créer mon thread et dans la gestion des
> variables ?
>
> Merci...
> --
> David
Non...
Je viens de faire un test qui ressemble à ce que tu souhaites (avec un
Thread) et cela fonctionne nickel...
Ce qui me chiffonne, c'est que ton erreur vient uniquement du fait que la
méthode Dispose() (ou Close()) de ton BinaryReader est appelé par
quelqu'un...
Ce que tu peux faire :
- Créer une classe MonBR qui hérite de BinaryReader
- Met le constructeur :
public MonBR(Stream s) : base(s)
{
}
- Tu "override" la méthode "protected Dispose()" :
protected override Dispose(boolean disposing)
{
//Ici on créer une fichier log qui enregistre la pile d'appel
using (StreamWriter w = new StreamWriter("C:MonLog.txt"))
//ATTENTION au droit !!!
{
w.WriteLine(Environment.StackTrace);
}
base.Dispose(disposing);
}
Utilise maintenant cette nouvelle classe pour lire ton fichier...
Executes ton site Web sur IIS avec les fichiers .PDB cela te permettra
d'obtenir les n° de ligne au niveau de pile.
Et tu nous fais un zoli copier/coller du contenu de ce fichier quand ca
plante !
Cordialement
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Sat, 23 Jun 2007 00:31:01 +0200, David
a écrit:
> En fait, je viens de faire des tests :
> Si j'exécute le code directement sur le OnClick d'un bouton, ça
> fonctionne
> nickel même avec IIS !
> Par contre, dans mon cas, je lance le traitement dans un thread.
> Et apparemment, c'est de là que vient le pb.
>
> En fait, je récupère la liste des fichiers dans un HttpFileCollection.
> J'instancie une classe (Uploading) en lui mettant cette liste de
> fichiers en
> paramètre.
> Si j'exécute directement dans le constructeur de ma classe, ça fonctionne
> bien.
>
> Par contre, dans mon constructeur :
> - J'instancie une variable global (p_files) de type HttpFileCollection,
> en
> mettant p_Files = Files (paramètre reçu dans ma classe)
> - je lance un thread (sans paramètre).
> Ce thread démarre et exploite la variable globale p_files.
>
> Voici en gros le code de mon constructeur :
> public Uploading(HttpFileCollection files, ...)
> {
> this.p_files = files;
> // Création et lancement du thread
> Thread upThread = new Thread(new ThreadStart(GetData));
> upThread.Start();
> }
>
> Le code précédent se trouve dans GetData.
>
> Dans mon cas, c'est bel et bien la variable p_files qui poserait pb car
> le
> f_files[0].InputStream ne peut pas être lu.
> Est-ce que je m'y prend mal pour créer mon thread et dans la gestion des
> variables ?
>
> Merci...
> --
> David
Non...
Je viens de faire un test qui ressemble à ce que tu souhaites (avec un
Thread) et cela fonctionne nickel...
Ce qui me chiffonne, c'est que ton erreur vient uniquement du fait que la
méthode Dispose() (ou Close()) de ton BinaryReader est appelé par
quelqu'un...
Ce que tu peux faire :
- Créer une classe MonBR qui hérite de BinaryReader
- Met le constructeur :
public MonBR(Stream s) : base(s)
{
}
- Tu "override" la méthode "protected Dispose()" :
protected override Dispose(boolean disposing)
{
//Ici on créer une fichier log qui enregistre la pile d'appel
using (StreamWriter w = new StreamWriter("C:MonLog.txt"))
//ATTENTION au droit !!!
{
w.WriteLine(Environment.StackTrace);
}
base.Dispose(disposing);
}
Utilise maintenant cette nouvelle classe pour lire ton fichier...
Executes ton site Web sur IIS avec les fichiers .PDB cela te permettra
d'obtenir les n° de ligne au niveau de pile.
Et tu nous fais un zoli copier/coller du contenu de ce fichier quand ca
plante !
Cordialement
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Sat, 23 Jun 2007 00:31:01 +0200, David
<David@discussions.microsoft.com> a écrit:
> En fait, je viens de faire des tests :
> Si j'exécute le code directement sur le OnClick d'un bouton, ça
> fonctionne
> nickel même avec IIS !
> Par contre, dans mon cas, je lance le traitement dans un thread.
> Et apparemment, c'est de là que vient le pb.
>
> En fait, je récupère la liste des fichiers dans un HttpFileCollection.
> J'instancie une classe (Uploading) en lui mettant cette liste de
> fichiers en
> paramètre.
> Si j'exécute directement dans le constructeur de ma classe, ça fonctionne
> bien.
>
> Par contre, dans mon constructeur :
> - J'instancie une variable global (p_files) de type HttpFileCollection,
> en
> mettant p_Files = Files (paramètre reçu dans ma classe)
> - je lance un thread (sans paramètre).
> Ce thread démarre et exploite la variable globale p_files.
>
> Voici en gros le code de mon constructeur :
> public Uploading(HttpFileCollection files, ...)
> {
> this.p_files = files;
> // Création et lancement du thread
> Thread upThread = new Thread(new ThreadStart(GetData));
> upThread.Start();
> }
>
> Le code précédent se trouve dans GetData.
>
> Dans mon cas, c'est bel et bien la variable p_files qui poserait pb car
> le
> f_files[0].InputStream ne peut pas être lu.
> Est-ce que je m'y prend mal pour créer mon thread et dans la gestion des
> variables ?
>
> Merci...
> --
> David
Non...
Je viens de faire un test qui ressemble à ce que tu souhaites (avec un
Thread) et cela fonctionne nickel...
Ce qui me chiffonne, c'est que ton erreur vient uniquement du fait que la
méthode Dispose() (ou Close()) de ton BinaryReader est appelé par
quelqu'un...
Ce que tu peux faire :
- Créer une classe MonBR qui hérite de BinaryReader
- Met le constructeur :
public MonBR(Stream s) : base(s)
{
}
- Tu "override" la méthode "protected Dispose()" :
protected override Dispose(boolean disposing)
{
//Ici on créer une fichier log qui enregistre la pile d'appel
using (StreamWriter w = new StreamWriter("C:\MonLog.txt"))
//ATTENTION au droit !!!
{
w.WriteLine(Environment.StackTrace);
}
base.Dispose(disposing);
}
Utilise maintenant cette nouvelle classe pour lire ton fichier...
Executes ton site Web sur IIS avec les fichiers .PDB cela te permettra
d'obtenir les n° de ligne au niveau de pile.
Et tu nous fais un zoli copier/coller du contenu de ce fichier quand ca
plante !
Cordialement
--
Gilles TOURREAU
gilles.tourreau@pos.fr
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Le Sat, 23 Jun 2007 00:31:01 +0200, David
a écrit:
> En fait, je viens de faire des tests :
> Si j'exécute le code directement sur le OnClick d'un bouton, ça
> fonctionne
> nickel même avec IIS !
> Par contre, dans mon cas, je lance le traitement dans un thread.
> Et apparemment, c'est de là que vient le pb.
>
> En fait, je récupère la liste des fichiers dans un HttpFileCollection.
> J'instancie une classe (Uploading) en lui mettant cette liste de
> fichiers en
> paramètre.
> Si j'exécute directement dans le constructeur de ma classe, ça fonctionne
> bien.
>
> Par contre, dans mon constructeur :
> - J'instancie une variable global (p_files) de type HttpFileCollection,
> en
> mettant p_Files = Files (paramètre reçu dans ma classe)
> - je lance un thread (sans paramètre).
> Ce thread démarre et exploite la variable globale p_files.
>
> Voici en gros le code de mon constructeur :
> public Uploading(HttpFileCollection files, ...)
> {
> this.p_files = files;
> // Création et lancement du thread
> Thread upThread = new Thread(new ThreadStart(GetData));
> upThread.Start();
> }
>
> Le code précédent se trouve dans GetData.
>
> Dans mon cas, c'est bel et bien la variable p_files qui poserait pb car
> le
> f_files[0].InputStream ne peut pas être lu.
> Est-ce que je m'y prend mal pour créer mon thread et dans la gestion des
> variables ?
>
> Merci...
> --
> David
Non...
Je viens de faire un test qui ressemble à ce que tu souhaites (avec un
Thread) et cela fonctionne nickel...
Ce qui me chiffonne, c'est que ton erreur vient uniquement du fait que la
méthode Dispose() (ou Close()) de ton BinaryReader est appelé par
quelqu'un...
Ce que tu peux faire :
- Créer une classe MonBR qui hérite de BinaryReader
- Met le constructeur :
public MonBR(Stream s) : base(s)
{
}
- Tu "override" la méthode "protected Dispose()" :
protected override Dispose(boolean disposing)
{
//Ici on créer une fichier log qui enregistre la pile d'appel
using (StreamWriter w = new StreamWriter("C:MonLog.txt"))
//ATTENTION au droit !!!
{
w.WriteLine(Environment.StackTrace);
}
base.Dispose(disposing);
}
Utilise maintenant cette nouvelle classe pour lire ton fichier...
Executes ton site Web sur IIS avec les fichiers .PDB cela te permettra
d'obtenir les n° de ligne au niveau de pile.
Et tu nous fais un zoli copier/coller du contenu de ce fichier quand ca
plante !
Cordialement
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr