Dichiarazione di un servizio Web XML

Quando si crea un servizio Web XML in ASP.NET, è necessario collocare la direttiva richiesta @ WebService all'inizio del file di testo con estensione ASMX. La presenza del file ASMX e della direttiva @ WebService garantisce la correlazione tra l'indirizzo URL del servizio Web XML e l'implementazione del servizio stesso. È quindi necessario implementare la classe del servizio Web XML che definisce i metodi e i tipi di dati visibili dai client del servizio Web XML. Infine, è necessario aggiungere la logica del servizio Web XML a tali metodi per consentire l'elaborazione delle richieste del servizio Web XML e l'invio delle risposte. La classe definita per il servizio Web XML può essere inclusa direttamente nel file ASMX oppure può essere inserita in un file diverso. In quest'ultimo caso, la classe deve essere compilata in un assembly. Eventualmente, è possibile applicare un attributo WebService alla classe che implementa il servizio Web XML. Tale classe può derivare dalla classe WebService.

Per dichiarare un servizio Web XML la cui implementazione risiede nello stesso file

  • Aggiungere la direttiva @ WebService all'inizio del file con estensione ASMX, indicando la classe che implementa il servizio Web XML e il linguaggio di programmazione utilizzato nell'implementazione.

    L'attributo Class può essere impostato su una classe che risiede nello stesso assembly della direttiva @ WebService oppure su una classe che risiede in un assembly diverso. In quest'ultimo caso, la classe deve essere collocata nella directory \Bin dell'applicazione Web dove risiede il servizio Web XML. L'attributo Language può essere impostato su C#, VB e JS, i quali indicano rispettivamente C#, Visual Basic .NET e JScript .NET.

    Nell'esempio di codice che segue l'attributo Language della direttiva @ WebService viene impostato su C# e l'attributo Class su MyMath, che risiede nello stesso file.

    <%@ WebService Language="C#" Class="MyMath" %>
    using System.Web.Services;
    public class MyMath {
         [ WebMethod ]
         public int Add(int num1, int num2) {
              return num1+num2;
         }
    }
    

Per dichiarare un servizio Web XML la cui implementazione risiede in un assembly

  • Aggiungere la direttiva @ WebService all'inizio di un file con estensione ASMX, indicando la classe che implementa il servizio Web XML, l'assembly su cui risiede l'implementazione e il linguaggio di programmazione utilizzato nell'implementazione.

    La direttiva @ WebService che segue è l'unica riga presente in un file con estensione ASMX e indica che la classe MyName.MyWebService risiede nell'assembly MyAssembly, nella directory \Bin dell'applicazione Web che contiene il servizio Web XML.

    <%@ WebService Language="C#" Class="MyName.MyWebService,MyAssembly" %>
    [Visual Basic]
    <%@ WebService Language="VB" Class="MyName.MyWebService,MyAssembly" %>
    

    **Nota   **Se non viene specificato alcun assembly nella direttiva @ WebService, la prima volta che si accede al servizio Web XML, ASP.NET cercherà nell'elenco degli assembly, nella directory \Bin dell'applicazione Web che contiene il servizio Web XML. Al primo accesso le prestazioni risulteranno pertanto migliori se si fornisce il nome dell'assembly.

Applicazione dell'attributo WebService

L'applicazione dell'attributo facoltativo WebService a una classe che implementa un servizio Web XML consente di impostare lo spazio dei nomi XML predefinito per il servizio Web XML e una stringa descrittiva del servizio stesso.

Si consiglia di modificare lo spazio dei nomi predefinito (http://tempuri.org) prima di pubblicare il servizio Web XML. È importante eseguire tale modifica in quanto il servizio Web XML deve essere distinto dagli altri servizi Web XML per i quali fosse stato inavvertitamente lasciato lo spazio dei nomi predefinito (<http://tempuri.org/>).

Per impostare lo spazio dei nomi XML di cui un servizio Web XML è parte

  • Applicare l'attributo WebService alla classe che implementa il servizio Web XML, impostando la proprietà Namespace.

Nell'esempio di codice seguente lo spazio dei nomi XML è impostato su https://www.contoso.com/.

<%@ WebService Language="C#" Class="Math" Debug=true%>
using System.Web.Services;
using System;

[WebService(Namespace="https://www.contoso.com/")]
public class Math {
     [ WebMethod ]
     public int Add(int num1, int num2) {
         return num1+num2;
         }
 }
[Visual Basic]
<%@ WebService Language="VB" Class="Math"%>
Imports System.Web.Services
Imports System

<WebService(Namespace:="https://www.contoso.com/")> _
Public Class Math
  <WebMethod()> _
   Public Function Add(num1 As Integer, num2 As Integer) _
                   As Integer
        Return num1 + num2
    End Function 
End Class 

Derivazione dalla classe WebService

Se le classi con cui si implementa un servizio Web XML creato con ASP.NET derivano dalla classe WebService, sarà possibile accedere a oggetti ASP.NET comuni come Application, Session, User e Context. Le proprietà Application e Session forniscono l'accesso alla memorizzazione e alla ricezione dello stato per tutta la durata dell'applicazione Web o di una determinata sessione. Per ulteriori informazioni sulla gestione dello stato, vedere Gestione dello stato nei servizi Web XML creati con ASP.NET. Se l'autenticazione è attivata, la proprietà User indica l'identità del chiamante per il servizio Web XML. Grazie a questa informazione il servizio Web XML è in grado di determinare se la richiesta è autorizzata. Per ulteriori informazioni sull'autenticazione, vedere Protezione dei servizi Web XML. La proprietà Context consente di accedere a tutte le informazioni specifiche per HTTP relative alla richiesta del client del servizio Web XML. Per ulteriori informazioni sulla proprietà Context, vedere Proprietà WebService.Context.

Nell'esempio di codice seguente viene utilizzata la proprietà Context per ottenere l'ora della richiesta sul server.

<%@ WebService Language="C#" Class="Util" %>
using System;
using System.Web.Services;

public class Util: WebService {
   [ WebMethod(Description="Returns the time as stored on the Server",
               EnableSession=false)]
   public string Time() 
   {
      return Context.Timestamp.TimeOfDay.ToString();
   }
 } 
[Visual Basic]
<%@ WebService Language="VB" Class="Util" %>
Imports System
Imports System.Web.Services

Public Class Util
   Inherits WebService
   
   <WebMethod(Description := "Returns the time as stored on the Server", _
              EnableSession := False)> _
   Public Function Time() As String
        Return Context.Timestamp.TimeOfDay.ToString()
   End Function
End Class

Vedere anche

Definizione dei metodi di un servizio Web XML | Generazione di servizi Web XML mediante ASP.NET | Nozioni di base per la generazione di servizi Web XML mediante ASP.NET