Un buon sostituto per i metodi del servizio web ASMX, ma non per un gestore generale

1

La cosa migliore che mi piace di ASP.NET MVC è che puoi chiamare direttamente un metodo server (chiamato action) dal client. Questo è così comodo e così semplice che mi piace davvero implementare questo modello anche in Web Form di ASP.NET.

Tuttavia, nei WebForm ASP.NET, per chiamare un metodo server dal client, è necessario utilizzare Metodi di pagina , o servizi Web, entrambi utilizzano SOAP come protocollo di comunicazione (sebbene sia possibile utilizzare anche JSON).

C'è anche un'altra sostituzione, che sta usando Generic Handlers. Il problema con loro è comunque che, per ogni metodo server, dovrebbe essere scritto un gestore generico separato. In altre parole, ogni Generic Handler funziona come un metodo semplice.

C'è comunque altro da imitare il modello MVC nei WebForms di ASP.NET?

Tieni presente che non posso modificare la piattaforma MVC in questo momento, perché il progetto a nostra disposizione è un grande progetto e non abbiamo risorse e tempo necessari per cambiare la nostra piattaforma. Quello che cerchiamo, è una semplice implementazione del modello MVC per le nostre chiamate AJAX. Un problema che abbiamo con i servizi Web è il problema noto di SoapException e non siamo interessati a creare SoapExctensions personalizzate .

    
posta Saeed Neamati 01.12.2011 - 09:32
fonte

2 risposte

2

Probabilmente stai ansimando per controllare l'API web wcf. L'anteprima 6 è scesa ieri, sembra davvero promettente. Se non riesci a diventare così sperimentale, puoi fare in modo che i servizi web WCF restituiscano POX o JSON piuttosto che SOAP.

Puoi anche integrare MVC nelle tradizionali app Web Form senza troppi problemi. Personalmente, mi piacciono i gestori di mcv meglio dei servizi tradizionali. Anche se l'API web wcf sta cambiando velocemente idea.

    
risposta data 01.12.2011 - 13:56
fonte
2

La mia preferenza è stata quella di usare un Generic Handler che ha un parametro che indica il nome dell'azione da intraprendere e un parametro separato con un elenco di argomenti delineato da inviare insieme ad esso. Questo mi consente di identificare i miei metodi di azione in una libreria e chiamarli in case statement o in modo riflessivo. Mentre la riflessione è di solito un grande successo nelle prestazioni, trovo che in questo scenario non sia abbastanza significativo da causare problemi. Di seguito è riportato un codice psuedo non testato che è una sorta di analisi dettagliata di ciò che ho usato in precedenza.

public class MyGenericHandler : IHttpHandler

    public void ProcessRequest(HttpContext context)
    {
        string action = context.Request.QueryString["action"];
        string[] args = context.Request.QueryString["args"].Split("|");

        MyController controller = new MyController();  // whatever your controller class is
        MethodInfo mi = controller.GetType().GetMethod(action);

        if (mi != null)
        {
            context.Response.ContentType = "text/html"
            context.Response.Write(mi.Invoke(controller, args));
        }
    }

}
    
risposta data 01.12.2011 - 14:22
fonte

Leggi altre domande sui tag