4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>
Web services Enhancements 2
Vediamo l'ultima tecnica che il .NET Framework mette a disposizione, i WSE . Questa giovane tecnologia, giusta alla versione 2, potenzia notevolmente l'implementazione di base dei web services aggiungendo interessanti potenzialità, come la possibilità di utilizzare anche la trasmissione binaria, funzioni per la crittografazione, per la sicurezza e molto altro. Per maggiori info consiglio una visita alla sezione dedicata all'argomento direttamente dall'MSDN della Microsoft.
L'implementazione di un web service di questo tipo nella nostra applicazione non è molto diversa da quanto si fa tradizionalmente.
Dobbiamo inserire la "web references" per essa da Visual Studio o con il comando "wsdl.exe", ma per poter utilizzare le nuove potenzialità che ci mette a disposizione dobbiamo configurare la nostra applicazione nel modo appropriato.
Innanzitutto, non essendo il WSE 2 inserito nella dotazione normale del Framework, dobbiamo scaricare e installare sul computer il pacchetto necessario da questo link . Una volta installato anche il supporto per Visual Studio .NET 2003, selezionando la voce "proprietà" dalla web application in cui vogliamo utilizzare questo tipo di web services avremo una schermata simile alla seguente, diversa dal solito:

Selezionando questa voce apparirà una finestra dove specificare le varie opzioni per l'implementazione di WSE2:

Una volta specificato che l'applicazione dovrà implementare questi nuovi web services, automaticamente sarà modificato il web.config per l'implementazione degli assembly necessari al funzionamento:
<configuration>
<configSections>
<section name="microsoft.web.services2" type="Microsoft.Web.Services2.Configuration.WebServicesConfiguration, Microsoft.Web.Services2, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>
<system.web>
<webServices>
<soapExtensionTypes>
<add type="Microsoft.Web.Services2.WebServicesExtension, Microsoft.Web.Services2, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" priority="1" group="0" />
</soapExtensionTypes>
</webServices>
</system.web>
<microsoft.web.services2>
<diagnostics />
</microsoft.web.services2>
</configuration>
private void Button3_Click(object sender, System.EventArgs e)
{
try
{
ServizioEsterno2.UploadFile2Wse up=new Esempio.ServizioEsterno2.UploadFile2Wse();
DimeAttachment da=new DimeAttachment(
Path.GetFileName(xfile.PostedFile.FileName),
"application/octet-stream",
TypeFormat.MediaType,
xfile.PostedFile.InputStream
);
up.RequestSoapContext.Attachments.Add(da);
if (up.InviaFile())
Label1.Text="OK!";
else
Label1.Text="NOOO";
}
catch (Exception ex)
{
Label1.Text=ex.ToString();
}
}
La classe del web service è stata istanziata con un nome leggermente diverso: "UploadFile2Wse" invece di "UploadFile2".
Questo è dovuto all'utilizzo di WSE: per poter utilizzare le nuove potenzialità offerte da queste classi, è creata una copia della classe del web service originale con l'aggiunta al nome della classe del suffisso "Wse".
Dopo la dichiarazione della classe del web service viene istanziata la classe "DimeAttachment". Questo nuovo oggetto è una delle novità del WSE e permette di inserire file in formato binario nella trasmissione SOAP senza toccare il codice del web service.
Sarà inserito alla fine del messaggio in formato SOAP consentendo in questo modo una trasmissione "mista". Nella dichiarazione di questo oggetto possiamo inserire lo stream dove prelevare il file, il content-type, il tipo di formato.
Ora vediamo il codice del web service naturalmente decurtato dall'inutile per le spiegazioni:
using System;
using System.Web.Services;
using Microsoft.Web.Services2;
using Microsoft.Web.Services2.Dime;
namespace WebService2
{
[WebService(Namespace = "urn:schemas:Upload2")]
public class UploadFile2 : System.Web.Services.WebService
{
[WebMethod]
public bool InviaFile()
{
const int BUFFER_SIZE=32768; // 32K buffer
SoapContext current=RequestSoapContext.Current;
if (current== null)
throw new ApplicationException("Only soap request allowed");
// Se non ci sono file allegati torna false
if (current.Attachments.Count == 0) return false;
DimeAttachment da = current.Attachments[0] as DimeAttachment;
// Lo salvo su disco
string fileName = String.Format(@"{0}{1}",
ConfigurationSettings.AppSettings["percorso"],
da.Id);
// Copio stream su file
using (FileStream file = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None, BUFFER_SIZE))
{
byte[] buffer = new byte[BUFFER_SIZE];
int len;
while ( (len=da.Stream.Read (buffer, 0, BUFFER_SIZE)) > 0)
file.Write (buffer, 0, len);
file.Flush();
}
return true;
}
}
}
Innanzitutto viene preso il context del messaggio SOAP corrente, quindi viene controllato che in esso sia presente un "attachment" e in caso positivo viene salvato su disco prelevando lo stream contenente il file e altre informazioni, come il nome dello stesso, direttamente dall'oggetto "DimeAttachment".
Un ringraziamento per la tecnica qui utilizzava va naturalmente ad un articolo di Cristian Civera a cui mi sono ispirato per questa sezione.
4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
- Pagina 1
- Pagina 2
- Pagina 3
- Pagina 4
- I nuovi controlli di ASP.NET 3.5: LinqDataSource, ListView e DataPager
- Galleria fotografica dinamica con ASP.NET AJAX
- Usare Search come un servizio nei tuoi siti e nei tuoi client
- Mappe nel tuo sito con Virtual Earth
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni
- Introduzione ai cloud based service con Windows Live Services
- Realizzare un custom extender AJAX con ASP.NET 3.5
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Difficoltà
Utilità
Contenuti

Stampa
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!