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

Développement Web avec .NET Discussion :

Http handler et IIS 5,IIS 6,IIS 7


Sujet :

Développement Web avec .NET

  1. #1
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut Http handler et IIS 5,IIS 6,IIS 7
    Bonjour tout le monde ;

    j'ai un probleme avec httpHandler

    voila tout d'abord mon code

    classe http handler
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    public class FileDownloaderHandler: IHttpHandler 
        {
     
     
            #region IHttpHandler Membres
     
            bool IHttpHandler.IsReusable
            {
                get { return false; }
            }
     
            void IHttpHandler.ProcessRequest(HttpContext context)
            {
               string  FileName= context.Request ["FileName"];
     
               //string MyFile = context.Server.MapPath("Produts/" + FileName) ;
                // If nomPhoto = "" OrElse Not File.Exists(nomFichier) Then
               FileInfo MyFile = new FileInfo(@context.Server.MapPath("Products/" + FileName));
               // "C:/inetpub/wwwroot/Uploaderfinal/Products/DERA/DERA V_1/0629015e-1f2b-439a-94f5-d65e0be59da8");//
               if (!MyFile.Exists )
               {
                   context.Response.Write(FileName + " File Not Found");
               }
               else
               {
     
     
                   FileInfo file = MyFile;// new FileInfo(MyFile);
                   //  context.Response.Write("Pas de fichier PDF avec le nom transmis")
                   //Else
                   FileStream Filestream = new FileStream(file.FullName , FileMode.Open);
                   //context.Response.AddHeader("content-type", "application/rar" );
                  // context.Response.Write(file.Extension.Replace('.', ' '));
                   byte[] buffer = new byte[Filestream.Length];
                   Filestream.Read(buffer, 0, buffer.Length);
     
                   context.Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName);
                   // Add a HTTP header to the output stream that contains the
                    //content length(File Size). This lets the browser know how much data is being transfered
                   context.Response.AddHeader("Content-Length", buffer.Length.ToString());
                   // Set the HTTP MIME type of the output stream
                   //context.Response.ContentType = "application/"+file.Extension.Substring(1) ;
                   Filestream.Close();
                   // Write the data out to the client.
                   context.Response.BinaryWrite(buffer);
                  // context.Response.Write("Fin");
               }
     
            }
     
            #endregion
        }
    et voila mon web.config

    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
    <configuration>
    	<appSettings/>
    	<connectionStrings/>
    	<system.web>
    		<authentication mode="Windows"/>
    		<identity impersonate="true"/>
    		<httpHandlers>
    			<add path="uploader" verb="*" type="FileUploaderHandler"  />
    			<add path="downloader" verb="*" type="FileDownloaderHandler"/>
    			<add path="Delete" verb="*" type="FileDelete"/>
    		</httpHandlers>
    		<httpRuntime executionTimeout="18000" maxRequestLength="100000"/>
    		<customErrors mode="Off"/>
    		<compilation debug="true" defaultLanguage="c#" /></system.web>
    	<system.webServer>
    		<handlers>
    			<add name="uploader.up_*" path="uploader" verb="*"     type="FileUploaderHandler" preCondition="integratedMode,runtimeVersionv2.0"/>
    			<add name="downloader.down_*" path="downloader"   verb="*" type="FileDownloaderHandler" preCondition="integratedMode,runtimeVersionv2.0"/>
    			<add name="Delete.del_*" path="Delete" verb="*"    type="FileDelete" preCondition="integratedMode,runtimeVersionv2.0"/>
    		</handlers>
    		<security>
    			<authorization>
    				<add accessType="Allow" users="?"/>
    			</authorization>
    		</security>
    	</system.webServer>
    </configuration>

    et voila la page d'appel (ce qu'une page de teste ni plus ni moin)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
          <form  id="form2" runat="server"  method ="post"  action="downloader" >
     
     
           <input type="text" name ="FileName" />
     
          <input id ="button3" type= "submit" value ="fg" />
           </form>
    c 'est une application pour telecharger (upload et supprimer ) des fichiers
    mon application marche tres tres bien en IIS 7 mais lorsque j'ai essaie de travailler avec IIS 5.1 j'ai un erreur de type

    HTTP 404 - Fichier introuvable
    Services Internet (IIS)
    et merci

  2. #2
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Bonjour,

    Il n'est parfois pas évident de gérer les différences entre les versions d'IIS.

    Le mieux est d'abord de coder et valider pour IIS 5 ou 6, puis ensuite de modifier le code pour qu'il tourne sous IIS 7.

    En regardant le code de ton HttpHandler, je ne vois pas trop ce qui pourrait poser problème vu la simplicité de ce qu'il réalise. Une erreur 404 est claire, donc tu devrais tester (si tu ne l'as pas déjà fait) la valeur de (@context.Server.MapPath("Products/" + FileName)); et dans IIS 5 et dans IIS 7. Peut-être qu'il ne map pas correctement la demande.

    La structure des Virtual Directories est bien identique sur les deux serveurs ?

  3. #3
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Bonjour,
    Merci NICOLAS ;

    mais je pense mon IIS ne identifie mon Httphandler (le downloader)

    car sinon il droit me renvoyé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     context.Response.Write(FileName + " File Not Found");
    FIlex File NotFound
    on cherchant j'ai trouve que il faut configurer mon IIS 5.1
    mais mois je suis amené à fournir un solution qui marche sur tous les serveurs IIS donc si il y'a une solution à coder si Préférable...

    et Merci encore

  4. #4
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Ok,

    Je pense qu'on est d'accord sur le fait qu'il s'agit d'un problème de configuration et non de code.

    Sur MSDN on parle des différences pour enregistrer un HTTPHandler entre les versions d'ISS :
    How you register an HTTP handler depends on the version of Internet Information Services (IIS) that hosts your application. For IIS 6.0, you register the handler by using the httpHandlers section of the Web.config file. For IIS 7.0 running in Classic mode, you register the handler in the httpHandlers section, and you map the handler to the Aspnet_isapi.dll file. For IIS 7.0 running in Integrated mode, you register the handler by using the handlers element in the system.WebServer section.
    Je suppose que tout tourne sous la version 2.0 du Framework ? Je n'ai jamais utilisé une version antérieure à IIS 6, donc je ne sais pas trop.

    Le mieux est de rechercher un vieux tutoriel qui indique comment enregistrer un HttpHandler dans IIS 5.

  5. #5
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Merci NICOLAS,

    moi je cherche une méthode codable car je doit fournir un SETUP qui doit faire tous afin que le solution soit accepter par toutes nos clients

    j'ai lit l'article de NICOLAS HUMANN ..
    et j'ai teste son code et ça marche en IIS 5.1 son configuration je vu faire le même chose avec mon code...

    j’espère inchallah que ça va aboutir a un convenable solution ..


    merci bcp NICOLAS

  6. #6
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    bonjour

    voila j'ai effectue des faibles modife sur le code source de NICOLAS HUMANN

    voila la nouvelle form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <form id="form1" runat="server" method = "post"  action= "download.down">
        <div>
            <img src="Image.axd?img=soleil.jpg" />
            <input type ="text" name ="FileName" />
            <input id ="dd" type ="submit" value = "send"/>
        </div>
     
        </form>
    et voila la web.config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <httpHandlers>
          <add path="download.down" verb="*" type="FileDownloaderHandler"  validate="True"/>
          <add path="upload.up" verb="*" type="FileUploaderHandler"  validate="True"/>
          <add path="delete.del" verb="*" type="FileDelete"  validate="True"/>
          <add path="Image.axd" verb="*" type="ImageHandler"  validate="True"/>
        </httpHandlers>
    cette fois il me renvoie une erreur de type
    HTTP 405 - Ressource non autorisée
    Services Internet (IIS)

  7. #7
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    le problème été dans que dans les enceints IIS (5 , 6 (peut etre ))
    chaque exention doit être ajouter au application manuel on via les API de IIS au configuration .

    pour cela j'ai travail avec l’extension ".axd" qui existe déjà dans IIS 5.1 mais je ssi pas ça signification.

    mais mon probleme est dans les droits d'acces j'ia donne a mes fichiers tt les droits mais j'ai encore une message de type

    Ligne 42 : // context.Response.Write("Pas de fichier PDF avec le nom transmis")
    Ligne 43 : //Else
    Ligne 44 : FileStream Filestream = new FileStream(file.FullName , FileMode.Open);
    Ligne 45 : //context.Response.AddHeader("content-type", "application/rar" );
    Ligne 46 : // context.Response.Write(file.Extension.Replace('.', ' '));
    Trace de la pile:


    [UnauthorizedAccessException: L'accès au chemin d'accès 'C:\Inetpub\wwwroot\HttpHandler\Images\soleil.jpg' est refusé.]
    System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +7715167
    System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) +1162
    System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) +61
    System.IO.FileStream..ctor(String path, FileMode mode) +55
    FileDownloaderHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context) in c:\Inetpub\wwwroot\HttpHandler\App_Code\FileDownloaderHandler.cs:44
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
    j’espère que vous avez une idée sur ça et merci encore

  8. #8
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Ok ça avance alors .

    Concernant l'erreur pour les droits d'accès, il s'agit aussi d'un problème de configuration. Comment est configurée le site dans IIS (authentication, impersonation, compte utilisateur ?).

    Il faudrait par exemple faire tourner le site avec un compte applicatif, auquel on donnera les droits de lecture sur les différents folders.

  9. #9
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    un peu de détailles slvp puisque je suis débutant en développement Web ...
    t'en fait pas j' apparent vite.

  10. #10
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    N'utilisant pas la version 5.1 difficile de te guider dans les écrans.

    Tu peux consulter ce tuto pour les droits NTFS et les droits utilisateurs sur 5.1. Pour la création d'un Virtual Directory sur 5.0 ou 5.1, c'est ici

    En espérant t'avoir aidé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. http handler et web.config
    Par topolino dans le forum ASP.NET
    Réponses: 2
    Dernier message: 25/09/2009, 14h51
  2. [config iis] 2 tomcat, 1 iis
    Par CPI_en_mousse dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 13/07/2009, 00h18
  3. Réponses: 4
    Dernier message: 07/05/2007, 12h30
  4. Services IIS sous XP / Serveur IIS
    Par Philou1313 dans le forum ASP
    Réponses: 5
    Dernier message: 22/08/2006, 11h49
  5. [IIS] Utilisation PHP sous IIS
    Par steve o'steen dans le forum IIS
    Réponses: 4
    Dernier message: 23/03/2006, 15h47

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