Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di afrappe
    Registrato dal
    Jan 2002
    Messaggi
    1,197

    [vb.net] httpHandler personalizzato

    per l'amministratore: ho sbagliato la sezione, potresti gentilmente spostarmi il messaggio sotto ASP.NET? grazie

    sto cercando di fare un httpHandler personalizzato per un determinato tipo di file: es(".p7m")

    ho creato un file .ashx all'interno della soluzione
    codice:
    <%@ WebHandler Language="VB" Class="p7mHandler" %>
    
    Imports System
    Imports System.Web
    
    Public Class p7mHandler : Implements IHttpHandler
        
        Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
    	'codice di esempio che scrive solo un testo
            context.Response.ContentType = "text/plain"
            context.Response.Write("Hello World")
        End Sub
     
        Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
            Get
                Return False
            End Get
        End Property
    
    End Class

    registro il mio httpHandler nel web.config
    codice:
    <system.web>
       <httpHandlers>
          <add type="p7mHandler" verb="*" path="*.p7m" />
       </httpHandlers> 
    </system.web>

    quando vado a richiamare un file ".p7m" dalla mia applicazione mi aspetto che vega richiamato il mio handler e mi visualizzi il testo di esempo che sta all'interno

    ma mi da errore:
    impossibile caricare il tipo p7mHandler
    codice:
    Riga 15: 	<system.web>
    Riga 16:     <httpHandlers>
    Riga 17:       <add type="p7mHandler" verb="*" path="*.p7m"/>    '<---- da errore qui
    Riga 18:     </httpHandlers>  
    Riga 19:     <!--
    manca qualcosa? c'e' da fare qualche settaggio prima?

  2. #2
    Utente di HTML.it L'avatar di afrappe
    Registrato dal
    Jan 2002
    Messaggi
    1,197
    nei vari esempi che ho trovato in rete si parla di piazzare il file ".ashx" all'interno di una cartella "App_Code" che io nella mia soluzione(vs 2005) non ho, ma questa cartella dove si trova? se esiste..

  3. #3
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    l'aggiungi tu bottone destro - aggiungi cartella app_code.

  4. #4
    Utente di HTML.it L'avatar di afrappe
    Registrato dal
    Jan 2002
    Messaggi
    1,197
    fatto ma ottengo lo stesso errore.

  5. #5
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    credo che non hai scritto bene l'elemento type
    manca l'assembly name.
    vedi qui
    http://msdn2.microsoft.com/en-us/library/aa903367.aspx
    I got the remedy

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Ti posto un handler fatto tempo fa in VB per visualizzare un prodotto:

    Classe dell'handler che fa un contratto con IHttpHandler (cartella App_Code):
    codice:
    Imports Microsoft.VisualBasic
    Imports system.Data
    Imports System.Data.SqlClient
    Imports System.Web
    Imports System.Configuration
    
    Public Class handler_prodotti
        Implements IHttpHandler
    
        Public ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable
            Get
                Return False
            End Get
        End Property
    
        Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
            Dim intidprodotto As Integer = ID_URL(context.Request.Path)
    
            ' Si connette al DB e riempie un datareader (dtr)
    
            dtr = cmd.ExecuteReader(CommandBehavior.SingleRow)
            If dtr.Read Then
                context.Response.Write("
    Descrizione del prodotto: ")
                context.Response.Write("<font color=red>" & dtr("descrizione") & "</font>")
                context.Response.Write("")
            Else
                context.Response.Write("
    Non ci sono prodotti con questo ID !")
            End If
    
            context.Response.Write("
    
     Pagina Iniziale ")
        End Sub
    
        Private Function ID_URL(ByVal URL_Barra As String) As Integer
            Dim nomipagine() As String
            Dim nomepagina As String
            Dim strId As String
            strId = String.Empty
            nomipagine = URL_Barra.Split("/")
            nomepagina = nomipagine(UBound(nomipagine))
    
            For ind As Integer = 0 To nomepagina.Length - 1
                If Char.IsDigit(nomepagina.Chars(ind)) Then
                    strId &= nomepagina.Chars(ind)
                End If
            Next
    
            If Not IsNothing(strId) Then
                Return CInt(strId)
            Else : Return -1
            End If
        End Function
    End Class


    Web.Config:
    codice:
        
        <httpHandlers>
    	   <add verb="*" path="prodotto*.aspx" type="[RootNameSpace].handler_prodotti, [AssemblyName]"></add>
        </httpHandlers>
    Dove [RootNameSpace] è lo spazio dei nomi di primo livello del tuo progetto, e [AssemblyName] è il nome dell'assembly principale.

  7. #7
    Utente di HTML.it L'avatar di afrappe
    Registrato dal
    Jan 2002
    Messaggi
    1,197
    scusate ma sono un po di coccio.
    nella mia applicazione non c'e' nessun namespace(o almeno non lo vedo)
    in questo caso prende il nome del progetto?
    in ogni modo: la soluzione si chiama "WebSite1", il progetto si chiama "WebSite1"
    l'handler è su una pagina ashx e non su un assembly "p7mHandler.ashx" e la classe all'interno della pagina ashx si chiama p7mHandler(come potere vedere dal codice)
    tutti i file sono in un unica cartella

    e come deve essere l'elemento add del web config?
    codice:
    <add type="WebSite1.p7mHandler" verb="*" path="*.p7m" />
    <add type="WebSite1.p7mHandler,p7mHandler" verb="*" path="*.p7m" />
    <add type="p7mHandler.ashx,p7mHandler" verb="*" path="*.p7m" />
    'altro?
    ho notato che mettendo il secondo parametro separato dalla virgola nel attributo type, l'errore restituito è diverso e sembra un problema di percorso(probabilmente il namespace sbagliato perche non so quale sia), ma questo parametro serve solo nel caso l'handler sia distributio come assembly o va messo anche nel caso sia in un file ashx?

    incollo l'errore magari si riesce a cpaire qualcosa
    codice:
    Messaggio di errore del parser: Impossibile caricare il file o l'assembly 'p7mHandler' o una delle relative dipendenze. Impossibile trovare il file specificato.
    
    Errore nel codice sorgente: 
    
    
    Riga 15: 	<system.web>
    Riga 16:     <httpHandlers>
    Riga 17:       <add type="p7mHandler,p7mHandler" verb="*" path="*.p7m" />
    Riga 18:     </httpHandlers>
    Riga 19:     <!-- 
     
    
    File di origine: C:\Documents and Settings\Usr_Prg1\Desktop\da cancellare\WebSite1\web.config    Riga: 17 
    
    Analisi del caricamento dell'assembly: Le informazioni che seguono possono aiutare a stabilire perché non è stato possibile caricare l'assembly 'p7mHandler'.
    
    
    === Informazioni sullo stato di preassociazione ===
    REG: Utente = ELLAS\Usr_Prg1
    REG: DisplayName = p7mHandler
     (Partial)
    REG: Appbase = file:///C:/Documents and Settings/Usr_Prg1/Desktop/da cancellare/WebSite1/
    REG: PrivatePath iniziale = C:\Documents and Settings\Usr_Prg1\Desktop\da cancellare\WebSite1\bin
    Assembly chiamante: System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.
    ===
    REG: l'associazione ha origine nel contesto di caricamento di default.
    REG: utilizzo del file di configurazione dell'applicazione: C:\Documents and Settings\Usr_Prg1\Desktop\da cancellare\WebSite1\web.config
    REG: utilizzo del file di configurazione computer da C:\WINNT\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
    REG: criterio attualmente non applicato al riferimento (associazione di assembly privati, personalizzati, parziali o basati su percorsi).
    REG: tentativo di download del nuovo URL file:///C:/WINNT/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/website1/8e23f785/6b9c22d8/p7mHandler.DLL.
    REG: tentativo di download del nuovo URL file:///C:/WINNT/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/website1/8e23f785/6b9c22d8/p7mHandler/p7mHandler.DLL.
    REG: tentativo di download del nuovo URL file:///C:/Documents and Settings/Usr_Prg1/Desktop/da cancellare/WebSite1/bin/p7mHandler.DLL.
    REG: tentativo di download del nuovo URL file:///C:/Documents and Settings/Usr_Prg1/Desktop/da cancellare/WebSite1/bin/p7mHandler/p7mHandler.DLL.
    REG: tentativo di download del nuovo URL file:///C:/WINNT/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/website1/8e23f785/6b9c22d8/p7mHandler.EXE.
    REG: tentativo di download del nuovo URL file:///C:/WINNT/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/website1/8e23f785/6b9c22d8/p7mHandler/p7mHandler.EXE.
    REG: tentativo di download del nuovo URL file:///C:/Documents and Settings/Usr_Prg1/Desktop/da cancellare/WebSite1/bin/p7mHandler.EXE.
    REG: tentativo di download del nuovo URL file:///C:/Documents and Settings/Usr_Prg1/Desktop/da cancellare/WebSite1/bin/p7mHandler/p7mHandler.EXE.

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    dovrebbe essere

    codice:
    <add type="WebSite1.p7mHandler,WebSite1" verb="*" path="*.p7m" />
    perche' il progetto si chiama WebSite1 e l'assembly principale in conseguenza si chiama WebSite1. (non li hai cambiati dalla dialog di proprietà del progetto)

    ps: quando si parla dell'assembly, non si intende quello dell'handler ma quello della solution

  9. #9
    Utente di HTML.it L'avatar di afrappe
    Registrato dal
    Jan 2002
    Messaggi
    1,197
    ho distribuito l'handler sotto forma di assembly "ClassLibrary1.dll",
    ho aggiunto il riferimento al progetto,
    lo mappo al file ".p7m"
    codice:
    <httpHandlers>
          <add type="ClassLibrary1.p7mHandler,ClassLibrary1" verb="*" path="*.p7m" />
    </httpHandlers>
    mi compila tutto bene nessun errore

    poi provo a richiamare un file .p7m tramite un link e appare la finestrella di scaricamento del file e non il testo di prova che avevo messo all'interno dell'handler(come se il file non è stato mappato a questo handler o l'handler non faccia niente)forse ho semplicemente dimenticato qualcosa

    riporto il codice dell'handler,
    codice:
    Imports System
    Imports System.Web
    
    Public Class p7mHandler : Implements IHttpHandler
    
        Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
            context.Response.ContentType = "text/plain"
            context.Response.Write("Hello World")
        End Sub
    
        Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
            Get
                Return False
            End Get
        End Property
    
    End Class

  10. #10
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    hai messo un breakpoint sul processRequest per vedere se ci passa ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.