Condividi tramite


Modello di codice per i servizi Web in codice gestito

Aggiornamento: novembre 2007

I servizi Web sono composti da due parti: il punto di ingresso del servizio Web e il codice che ne implementa la funzionalità. In ASP.NET il file con estensione ASMX è un file di testo che funge da punto di ingresso indirizzabile per il servizio Web. Esso fa riferimento al codice presente in assembly precompilati, in un file code-behind o nel file ASMX stesso.

Nota:

Se il codice è incluso direttamente nel file ASMX, ASP.NET lo compilerà su richiesta nel server.

La direttiva di elaborazione WebService contenuta all'inizio del file con estensione ASMX determina dove si trova l'implementazione del servizio Web. Per impostazione predefinita, quando si crea un servizio Web con il modello di progetto Servizio Web ASP.NET in Visual Studio vengono utilizzati file code-behind, quali Service1.asmx.vb o Service1.asmx.cs.

Nota:

Visual Studio non supporta la compilazione in linguaggi diversi. Non è possibile, ad esempio, includere un servizio Web Visual C# in un progetto Applicazione Web ASP.NET Visual Basic e viceversa.

Quando si compila un servizio Web in codice gestito, ASP.NET fornisce automaticamente l'infrastruttura e gestisce l'elaborazione delle richieste e delle risposte del servizio Web, inclusa l'analisi e la creazione di messaggi SOAP.

Direttiva di elaborazione WebService

All'inizio della pagina ASMX si trova una direttiva di elaborazione WebService, che include informazioni sotto forma di attributi relativi all'implementazione del servizio Web. Tale direttiva di elaborazione fornisce le informazioni necessarie all'ambiente ASP.NET, quali ad esempio l'indicazione della classe che implementa la funzionalità del servizio Web. Di seguito è riportato un esempio della direttiva di elaborazione WebService:

[Visual Basic]
<%@ WebService Language="vb" Codebehind="Service1.asmx.vb"
    Class="WebService1.Service1" %>


[C#]
<%@ WebService Language="c#" Codebehind="Service1.asmx.cs"
    Class="WebService1.Service1" %>

L'attributo Language indica il linguaggio di programmazione utilizzato per lo sviluppo del servizio Web. È possibile creare i servizi Web in qualsiasi linguaggio compatibile con .NET, quale Visual Basic .NET o Visual C#.

Durante la creazione di servizi Web in codice gestito mediante Visual Studio .NET, l'implementazione del servizio Web risiede in un file code-behind. Tale file è associato alla pagina ASMX con l'attributo Codebehind.

Nota:

Tale attributo consente la gestione del progetto di servizio Web in Visual Studio e non è obbligatorio in fase di esecuzione.

Quando si utilizza il modello di progetto Servizio Web ASP.NET, l'attributo Class indica quale classe nel file code-behind implementa le funzionalità del servizio Web.

In Visual Studio .NET questa direttiva di elaborazione viene inserita automaticamente nel file con estensione ASMX quando si utilizza il modello di progetto Servizio Web ASP.NET.

Suggerimento:

Se si sceglie di rinominare la classe, sarà necessario modificarne il nome nell'attributo Class della direttiva WebService.

Nota:

Per visualizzare il contenuto del file ASMX, in Esplora soluzioni fare clic con il pulsante destro del mouse sul file ASMX e scegliere Apri con dal menu di scelta rapida. Nella finestra di dialogo Apri con selezionare Editor di codice sorgente (testo), quindi fare clic su Apri.

Per ulteriori informazioni, vedere Procedura dettagliata: Creazione di un servizio Web XML di base tramite ASP.NET.

Classe System.Web.Services.WebService

La classe System.Web.Services.WebService, che definisce la classe base facoltativa per i servizi Web, fornisce accesso diretto agli oggetti ASP.NET più comuni, quali quelli per lo stato applicazione e per lo stato sessione. Per impostazione predefinita, i servizi Web creati in codice gestito mediante Visual Studio ereditano da questa classe. Il servizio Web può ereditare da questa classe per ottenere l'accesso agli oggetti intrinseci di ASP.NET, quali Request e Session. Per ulteriori informazioni, vedere Classe WebService.

Se non eredita da questa classe, il servizio Web può accedere agli oggetti intrinseci ASP.NET da System.Web.HttpContext.Current. La classe che implementa il servizio Web deve essere pubblica e disporre di un costruttore predefinito pubblico, vale a dire un costruttore senza parametri per consentire ad ASP.NET di creare un'istanza della classe del servizio Web per l'elaborazione delle richieste del servizio Web in ingresso. Per ulteriori informazioni, vedere Proprietà HttpContext.Current.

[Visual Basic]
Imports System.Web.Services
Public Class Service1
   Inherits System.Web.Services.WebService
   ' Implementation code.
End Class


[C#]
using System.Web.Services;
public class Service1 : System.Web.Services.WebService
{
   // Implementation code.
}

Per ulteriori informazioni, vedere Eredità dalla classe WebService.

Attributo WebService

Ogni servizio Web richiede uno spazio dei nomi univoco, che consente alle applicazioni client di operare una distinzione tra i servizi Web che potrebbero utilizzare lo stesso nome di metodo. Lo spazio dei nomi predefinito per i servizi Web creati in Visual Studio .NET è "http://tempuri.org/WebService1/Service1" dove WebService1 è il nome del progetto e Service1 è il nome della classe. Sebbene lo spazio dei nomi sia molto simile a un URL, non è scontato che sia visualizzabile in un browser in quanto è solo un identificativo univoco.

Nota:

È possibile fornire una pagina Web in tale percorso contenente informazioni sui servizi Web offerti.

Con l'attributo WebService è possibile specificare lo spazio dei nomi e una breve descrizione del servizio Web. Tale descrizione apparirà sulla pagina della Guida relativa al servizio quando si chiama il servizio Web da un browser senza specificare una stringa di query:

[Visual Basic]
<System.Web.Services.WebService( _ 
   Namespace:="http://tempuri.org/WebService1/Service1", _ 
   Description:="A short description of the Web service.")> _
Public Class Service1
   Inherits System.Web.Services.WebService
   ' Implementation code.
End Class


[C#]
[System.Web.Services.WebService( 
   Namespace="http://tempuri.org/WebService1/Service1",  
   Description="A short description of the Web service.")] 
public class Service1 : System.Web.Services.WebService
{
   // Implementation code.
}

Per ulteriori informazioni, vedere Classe WebServiceAttribute e Utilizzo dell'attributo WebService.

Utilizzo dell'attributo WebMethod

Per esporre un metodo come parte di un servizio Web, è necessario inserire un attributo WebMethod prima della dichiarazione di ciascun metodo pubblico da esporre. Per ulteriori informazioni, vedere la classe Procedura: creare un metodo di servizio Web.

[Visual Basic]
<System.Web.Services.WebMethod()> _
Public Function MyString(ByVal x as string) As String
   ' Implementation code.
End Function


[C#]
[System.Web.Services.WebMethod()] 
public string MyString(string x) 
{
   //implementation code
}

L'attributo WebMethod contiene diverse proprietà per la configurazione del comportamento del servizio Web. Per ulteriori informazioni, vedere Classe WebMethodAttribute e Utilizzo dell'attributo WebMethod. È possibile ad esempio utilizzare questo attributo per fornire una breve descrizione che apparirà sulla pagina della Guida relativa al servizio associata:

[Visual Basic]
<System.Web.Services.WebMethod( _ 
   Description:="A short description of this method.")> _
Public Function MyString(ByVal x as string) As String
   ' Implementation code.
End Function


[C#]
[System.Web.Services.WebMethod( 
   Description="A short description of this method.")] 
public string MyString(string x) 
{
   // Implementation code.
}

Separare le proprietà multiple con una virgola. Per fornire, ad esempio, una descrizione e archiviare nella memoria cache i risultati di un servizio Web per 60 secondi:

[Visual Basic]
<System.Web.Services.WebMethod( _ 
   Description:="A short description of this method.", _ 
           CacheDuration:=60)> _
Public Function MyString(ByVal x as string) As String
   ' Implementation code.
End Function


[C#]
[System.Web.Services.WebMethod( 
   Description="A short description of this method.", 
   CacheDuration=60)] 
public string MyString(string x) 
{
   // Implementation code.
}

Ogni servizio Web è composto da un file con estensione ASMX e da una classe del servizio Web. Il file ASMX contiene una direttiva di elaborazione WebService che fa riferimento alla classe. La classe del servizio Web è pubblica, dispone di un costruttore pubblico predefinito e contiene uno o più metodi pubblici contrassegnati con l'attributo WebMethod. Nel diagramma riportato di seguito viene illustrata la relazione tra il progetto, la classe, i relativi metodi e il servizio Web ottenuto.

Classi WebService ed elementi ottenuti

Elementi per la distribuzione di un progetto Servizio Web

Vedere anche

Concetti

Modello di codice per accedere ai servizi Web in codice gestito

Altre risorse

Creazione di servizi Web in codice gestito