none
AJAX direkt, ohne WebMethod RRS feed

  • Frage

  • Hallo,

    möchte folgendes erreichen: Ein ASP-Projekt besteht aus einer einzigen ASPX-Seite. Diese enthält AJAX Anfragen die per GET (mit Search-Parameter) oder POST (Formularfelder) übermittelt werden. Der Webserver sollte diese Requests verarbeiten und Daten (XML usw.) zurücksenden. Wie entwickle ich so was möglichst ressourcenschonend. Im Prinzip bräuchte ich nur ein Event welches gefeuert wird wenn eine Anfrage rein kommt und in der ich auf die GET/POST Parameter zugreifen kann. Die Antwort-Daten werden hier aufbereitet und zurückgesendet. Session-Verwaltung wäre noch angenehm, mehr brauche ich nicht. Wie legt man so ein Projekt an?

    Viele Grüße
    W. Wolf

    Donnerstag, 4. August 2011 13:07

Antworten

  • Ich denke, was Du willst, ist ein generischer Handler (ASHX). Da sparst Du dir den kompletten ASP.NET-Page-Framework-Overhead und bist ganz unten an der Basis, was der Performance zu Gute kommen dürfte.

    Alternativ sieh Dir ASP.NET MVC an, dort kannst Du dann eine XML-Ausgabeseite basteln.

    Anlegen? Als ASP.NET- oder ASP.NET-MVC-Webseite, und dann entweder einen generischen Handler hinzufügen oder eben einen ASP.NET-MVC-Controller samt View.


    Karsten Samaschke
    Entwickler, Trainer, Autor, Coach
     
    wpzone.de - Community rund um die WP7-Entwicklung
    aspnetzone.de - Community rund um die ASP.NET-Entwicklung
    karsan.de - mein Weblog
    familyblogger.de - mein Haus, mein Auto, meine Kinder
    Donnerstag, 4. August 2011 14:09
  • Hi,

    im einfachsten Fall sieht so ein Handler bspw. so aus:

    <%@ WebHandler Language="VB" Class="XmlDownload" %>
    
    Imports System
    Imports System.Web
    
    Public Class XmlDownload
    
      Implements IHttpHandler, IRequiresSessionState
      
      Private Context As HttpContext
      
    Public Sub ProcessRequest(ByVal ctx As HttpContext) Implements IHttpHandler.ProcessRequest 
    
      Me.Context = ctx
      
    Dim Result As String
      Result = "<xml ...><Data>...</Data>"
    
      ctx.Response.Clear()
      ctx.Response.ContentType = "text/xml" 
      ctx.Response.AddHeader( "Content-Disposition","inline;filename=data.xml" ) 
      ctx.Response.Write( Result )
      ctx.Response.End ()
    
    End Sub 
     
    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
      Get
        Return False
      End Get
    End Property
    
    End Class
    
    
    Innerhalb des Handlers kannst Du dann über Context.Session( "..." ) auf die Sessionvariablen zugreifen.

    HTH

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    • Als Antwort markiert W. Wolf Montag, 8. August 2011 05:35
    Freitag, 5. August 2011 18:59
    Moderator

Alle Antworten

  • Ich denke, was Du willst, ist ein generischer Handler (ASHX). Da sparst Du dir den kompletten ASP.NET-Page-Framework-Overhead und bist ganz unten an der Basis, was der Performance zu Gute kommen dürfte.

    Alternativ sieh Dir ASP.NET MVC an, dort kannst Du dann eine XML-Ausgabeseite basteln.

    Anlegen? Als ASP.NET- oder ASP.NET-MVC-Webseite, und dann entweder einen generischen Handler hinzufügen oder eben einen ASP.NET-MVC-Controller samt View.


    Karsten Samaschke
    Entwickler, Trainer, Autor, Coach
     
    wpzone.de - Community rund um die WP7-Entwicklung
    aspnetzone.de - Community rund um die ASP.NET-Entwicklung
    karsan.de - mein Weblog
    familyblogger.de - mein Haus, mein Auto, meine Kinder
    Donnerstag, 4. August 2011 14:09
  • Bzgl. "Antwort, keine Antwort, doch Antwort". Ich hab mich nur verklickt und wollte das Posting erstmal nur als Antwort vorschlagen. Sorry.

    @W. Ein generischer Handler dürfte wie von Karsten vorgeschlagen, das richtige für dich sein. Um dort auch mit der Session arbeiten zu können, musst Du noch ein Interface implementieren.

    Für reine Session-Lesezugriffe: IReadOnlySessionState
    Für Lese und Schreibzugriffe auf die Session: IRequiresSessionState

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 4. August 2011 17:28
    Moderator
  • Hallo,

    Danke für den Ansatz. Ich betrete damit Neuland und werde mich in das Thema erst einarbeiten müssen. Ich lasse mal den Thread noch ein paar Tage offen, zum einmem habe ich eventuell noch Fragen die im Kontext bleiben sollten, zum anderen gibt es vielleicht noch erläuternde Zusatz-Meldungen, die mir weiterhelfen.

    Vor allem das Zusammenspiel ohne ASP.NET-Page-Framework-Overhead und den Session-Klassen durch Interface Impementation ist mir momentan noch völlig unklar. Mal sehen ob ich dazu noch was finden kann. Die nötigen Stichwörter habe ich ja nun...

    Schönen Gruß

    W. Wolf

    Freitag, 5. August 2011 18:45
  • Hi,

    im einfachsten Fall sieht so ein Handler bspw. so aus:

    <%@ WebHandler Language="VB" Class="XmlDownload" %>
    
    Imports System
    Imports System.Web
    
    Public Class XmlDownload
    
      Implements IHttpHandler, IRequiresSessionState
      
      Private Context As HttpContext
      
    Public Sub ProcessRequest(ByVal ctx As HttpContext) Implements IHttpHandler.ProcessRequest 
    
      Me.Context = ctx
      
    Dim Result As String
      Result = "<xml ...><Data>...</Data>"
    
      ctx.Response.Clear()
      ctx.Response.ContentType = "text/xml" 
      ctx.Response.AddHeader( "Content-Disposition","inline;filename=data.xml" ) 
      ctx.Response.Write( Result )
      ctx.Response.End ()
    
    End Sub 
     
    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
      Get
        Return False
      End Get
    End Property
    
    End Class
    
    
    Innerhalb des Handlers kannst Du dann über Context.Session( "..." ) auf die Sessionvariablen zugreifen.

    HTH

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    • Als Antwort markiert W. Wolf Montag, 8. August 2011 05:35
    Freitag, 5. August 2011 18:59
    Moderator