IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[C# 2.0 - ASP.NET 2.0] Response.BinaryWrite envoie 0 octets


Sujet :

ASP.NET

  1. #1
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut [C# 2.0 - ASP.NET 2.0] Response.BinaryWrite envoie 0 octets
    Salut

    J'ai un petit problème avec un PDF...

    J'utilise le composant ASPPDF (pour ceux qui connaissent) pour générer un PDF que je veux ensuite envoyer au client (normal quoi )

    Donc je génère mon PDF et je fais ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Response.ContentType = "application/pdf";
    Response.AddHeader("Content-disposition", "inline;filename=report.pdf");
     
    byte[] byte_temp = (byte[])objDoc.SaveToMemory();
    Response.BinaryWrite(byte_temp);
    Response.End();
    et... j'ai 0 octets en sortie. J'ai controlé au debugger, mon byte_temp a une taille de 133907 et n'est pas composé uniquement de 0

    Quand je fais ca, j'ai bien une sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Response.ContentType = "application/pdf";
    Response.AddHeader("Content-disposition", "inline;filename=report.pdf");
     
    byte[] byte_temp = (byte[])objDoc.SaveToMemory();
    Response.Write(Convert.ToBase64String(byte_temp));
    Response.End();
    Oui je sais ca ne sert à rien mais ca fonctionn, j'ai bien une chaine de caractères qui s'affiche à l'écran

    Je me demandais si Response.BinaryWrite n'aurait pas une taille de buffer limitée, quelqu'un sais ca ?

  2. #2
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    Moi j'utilise ça pour faire des pdf.. qui peuvent etre gros parfois et tout marche à merveille...

    j'ai juste cette ligne en plus avant le writebinary...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            Response.Cache.SetExpires(DateTime.Now.AddMonths(1));
    Mais avant le rendu du pdf.. essaie d'ecrir te contenu de ton byte_tmp dans un fichier voir ce que ca donne...
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  3. #3
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    Quand j'écris le PDF dans un fichier, il est valide

    J'ai rajouté la ligne que tu m'as dis, mais ca ne change rien, j'ai toujours 0 octets d'écrits en sortie

    EDIT : Est ce que ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void Application_BeginRequest(object sender, EventArgs e)
    {
        Response.Expires = -1;
        Response.CacheControl = "no-cache";
        Response.AddHeader("Pragma", "no-cache");
        Response.ExpiresAbsolute = DateTime.Now.Date;
    }
    ca peut gêner ? Je précise c'est dans le global.asax (mais bon, vous vous en doutiez )

  4. #4
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    Je remonte un peu ce sujet, parce que je comprends pas ce qui peut se passer... Je pensait que le problème s'était résolu de lui même (rien touché et ça fonctionnait, jusqu'à hier, date de mise en production, où le problème est reparu)

    Dès que j'enlève le code du Global.asax, ça fonctionne, sinon ça ne fonctionne pas, j'ai même tenté de les enlever 1 par 1, mais le problème devient alors aléatoire

    Pour info, voilà les en-têtes HTTP renvoyés par le serveur lors du clic sur le lien du PDF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    HTTP/1.x 200 OK
    Server: Microsoft-IIS/5.0
    Date: Wed, 24 Oct 2007 07:03:56 GMT
    X-Powered-By: ASP.NET
    X-AspNet-Version: 2.0.50727
    Pragma: no-cache, no-cache
    content-disposition: inline;filename=report.pdf
    Cache-Control: no-cache
    Expires: -1
    Content-Type: application/pdf
    Content-Length: 318176
    L'autre question que je me pose, c'est est ce que c'est normal que Pragma soit défini à "no-cache, no-cache

  5. #5
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    Citation Envoyé par mioux Voir le message
    Dès que j'enlève le code du Global.asax, ça fonctionne,sinon ça ne fonctionne pas
    Tu as quoi comme code sur ton global.asax???
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  6. #6
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    Ben le code que j'avais mis juste au dessus

    c'est à dire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
        void Application_BeginRequest(object sender, EventArgs e)
        {
            Response.Expires = -1;
            Response.CacheControl = "no-cache";
            Response.AddHeader("Pragma", "no-cache");
            Response.ExpiresAbsolute = DateTime.Now.Date;
        }
     
        // Ce morceau de code a été rajouté plus tard
     
        void Application_PreRequestHandlerExecute(object sender, EventArgs e)
        {
            try
            {
                connexionBDD lng_con = new connexionBDD();
     
                string lng_SQL = "SELECT CULTURE_ID\n" +
                                 "FROM " + lng_con.PMBase + ".dbo.LNK_PAYS_LANGUE\n" +
                                 "WHERE INDEX_LANGUE = " + HttpContext.Current.Session["langue"];
     
                System.Data.SqlClient.SqlConnection lng_ACSDB = lng_con.ouvrirBDD();
                System.Data.SqlClient.SqlCommand lng_SQL_Commande = new System.Data.SqlClient.SqlCommand(lng_SQL, lng_ACSDB);
                System.Data.SqlClient.SqlDataReader lng_SQL_Resultat = lng_SQL_Commande.ExecuteReader();
     
                string cultureInfo = System.Globalization.CultureInfo.CurrentCulture.Name;
     
                if (lng_SQL_Resultat.Read())
                    cultureInfo = lng_SQL_Resultat["CULTURE_ID"].ToString();
     
                lng_SQL_Resultat.Close();
                lng_con.fermerBDD();
     
                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureInfo);
            }
            catch
            {
                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");
            }
        }

  7. #7
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    Essaie de mettre ce code juste avant de telecharger ton fichier..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Response.Expires = -1;
            Response.CacheControl = "no-cache";
            Response.AddHeader("Pragma", "no-cache");
            Response.ExpiresAbsolute = DateTime.Now.Date;
    et supprime le du global.asax
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  8. #8
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 367
    Points : 191
    Points
    191
    Par défaut
    J'ai testé, mais ca ne fonctionnait pas

    J'ai cherché pas mal de solutions sans réponses, jusqu'à ce que je me demande "pourquoi mettre les 4 lignes ?" et je n'ai laissé que le Response.Expires = -1 dans le Global.asax... ca a l'air de fonctionner... je dit bien "ca a l'air" parce qu'il me semble que j'avais déjà testé et que ca n'avait fonctionné que 2 jours...

Discussions similaires

  1. Hébergement Netissime - ASP.Net : base SQL Server et envoi de mails.
    Par jiemde dans le forum Autres hébergeurs
    Réponses: 3
    Dernier message: 16/04/2012, 16h01
  2. Asp.net 2.0, response.write dépassé ?
    Par Fngonka dans le forum ASP.NET
    Réponses: 3
    Dernier message: 17/04/2009, 12h03
  3. Réponses: 9
    Dernier message: 25/06/2008, 13h40
  4. ASP.NET JavaScript Response.Write
    Par hippoX dans le forum ASP.NET
    Réponses: 9
    Dernier message: 05/06/2007, 12h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo