Web Services, Remoting, WSE2: pregi e difetti

di Andrea Zani, in ASP.NET,

L'idea di questo articolo è nata da un desiderio personale di comparare quale delle tre tecniche più famose ora disponibili per il .NET Framework fosse più comoda, semplice da implementare, personalizzabile e con le maggiori prestazioni. Le tre tecniche messe a confronto sono le seguenti:

  • Web services
  • Remoting
  • Web services Enhancements 2

Innanzitutto partiamo dal compito che vogliamo far svolgere alla nostra applicazione, quindi implementiamo queste tre tecniche per eseguire confronti mirati. L'esempio che ho preso in considerazione è un semplice trasferimento di un file da una web application ad un'altra .NET application. Per complicare il tutto, il file è inserito dall'utente e trasferito sul server in upload.

Vediamo la semplice web application con cui faremo i tre test:

L'applicazione di esempio

Una volta selezionato il file di cui fare l'upload, è possibile specificare il sistema con cui inviarlo ad una seconda applicazione. Prima di vedere il codice utilizzato per queste operazioni spreco due parole sulle applicazioni che riceveranno ed elaboreranno il file inviato.

Nel caso dei tradizionali web services e dei web services enhancements 2, le applicazioni saranno tradizionali web application accessibili con il già noto protocollo HTTP, mentre nel caso del remoting l'applicazione ricevente sarà una semplice Windows Form.

Inviamo i file con il web service

Per l'invio del file useremo una tecnica molto semplice, trasformandolo in un array di bytes. Vediamo il codice che sarà eseguito una volta che l'utente avrà selezionato il file e premuto il button "Upload WS":

private void Button1_Click(object sender, System.EventArgs e)
{
 try
 {
  int lunghezza = xfile.PostedFile.ContentLength;
  if (lunghezza > 0)
  {
  byte[] b=new byte[lunghezza];
  xfile.PostedFile.InputStream.Read(b,0,lunghezza);
  string nomefile= Path.GetFileName(xfile.PostedFile.FileName);
  ServizioEsterno.Service1 se=new ServizioEsterno.Service1();
  if (se.File(b, nomefile))
   Label1.Text = "ok!";
  else
   Label1.Text = "NOOO!";
  }
  else
   Label1.Text = "Nessun file!";
 }
 catch (Exception ex)
 {
  Label1.Text = ex.ToString();
 }
}

ServizioEsterno.Service1 sono il namespace e il nome della classe del web service, la funzione "File" invia il file binario e il nome del file restituendo il valore "true" se l'operazione è stata eseguita correttamente o "false" in caso di problemi.

La classe del web service, che trovate decurtata da ciò che è non utile per la comprensione dello stesso, si occuperà della ricezione del file e della sua memorizzazione in una cartella apposita:

namespace WebService1
{
 public class Service1 : System.Web.Services.WebService
 {
  [WebMethod]
  public bool File(byte[] contenuto, string nome)
  {
  try
  {
   FileStream fs=new FileStream(
     ConfigurationSettings.AppSettings["percorso"]+nome,
     FileMode.Create,
     FileAccess.Write);
   fs.Write(contenuto,0,contenuto.Length);
   fs.Close();
   return true;
  }
  catch
  {
   return false;
  }
  }
 }
}

Viene quindi creato il file con il nome passato come parametro ed inserito all'interno dello stesso l'array di byte.

4 pagine in totale: 1 2 3 4

Attenzione: Questo articolo contiene un allegato.

Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti