Condividi tramite


Procedura: utilizzare l'attributo WebMethod

Aggiornamento: novembre 2007

L'associazione dell'attributo WebMethod a un metodo Public indica che il metodo deve essere esposto come parte del servizio Web XML. Le proprietà di questo attributo possono essere utilizzate anche per configurare ulteriormente il comportamento del metodo del servizio Web XML. Per ulteriori informazioni, vedere Modello di codice per servizi Web XML in codice gestito.

L'attributo WebMethod fornisce le seguenti proprietà:

  • BufferResponse

  • CacheDuration

  • Description

  • EnableSession

  • MessageName

  • TransactionOption

BufferResponse

La proprietà BufferResponse dell'attributo WebMethod consente il buffer delle risposte per un metodo del servizio Web XML. Se impostata su true, l'impostazione predefinita, ASP.NET inserisce nel buffer l'intera risposta prima di inviarla al client. L'inserimento nel buffer è molto efficiente e consente di migliorare le prestazioni riducendo al minimo le comunicazioni tra il processo di lavoro e il processo di Internet Information Services. Quando è impostata su false, ASP.NET inserisce nel buffer la risposta in blocchi di 16 KB. Generalmente questa proprietà viene impostata su false solo se non si desidera che tutto il contenuto della risposta venga inserito in memoria in una sola volta. Un esempio è la scrittura di un insieme i cui elementi vengono estratti da un database. Il valore predefinito è true, a meno che non ne venga specificato uno diverso. Per ulteriori informazioni, vedere Proprietà WebMethodAttribute.BufferResponse.

Per inserire nel buffer la risposta di un metodo del servizio Web XML

  • Utilizzare la proprietà BufferResponse dell'attributo WebMethod, come viene illustrato di seguito:

    Public Class Service1
        Inherits System.Web.Services.WebService
        <System.Web.Services.WebMethod(BufferResponse:=False)> _
        Public Function GetBigData() As DataSet
            'implementation code
        End Function
    End Class
    
    public class Service1 : System.Web.Services.WebService
    { 
        [System.Web.Services.WebMethod(BufferResponse=false)]
        public DataSet GetBigData()
        {
           //implementation code
        }
    }
    

CacheDuration

La proprietà CacheDuration dell'attributo WebMethod consente l'archiviazione nella cache dei risultati relativi a un metodo del servizio Web XML. ASP.NET archivierà nella cache i risultati relativi a ogni parametro univoco impostato. Il valore di questa proprietà specifica il numero di secondi necessari ad ASP.NET per archiviare nella cache i risultati. Un valore pari a zero disabilita l'archiviazione nella cache dei risultati. Il valore predefinito è pari a zero, a meno che non ne venga specificato uno diverso. Per ulteriori informazioni, vedere Proprietà WebMethodAttribute.CacheDuration.

Per inserire nella cache i risultati di un metodo del servizio Web XML

  • Utilizzare la proprietà CacheDuration dell'attributo WebMethod, come viene illustrato di seguito:

    Public Class Service1
        Inherits System.Web.Services.WebService
        <System.Web.Services.WebMethod(CacheDuration:=60)> _
        Public Function ConvertTemperature(ByVal dFahrenheit As Double) _
                                           As Double
            ConvertTemperature = ((dFahrenheit - 32) * 5) / 9
        End Function
    End Class
    
    public class Service1 : System.Web.Services.WebService
    { 
        [System.Web.Services.WebMethod(CacheDuration=60)]
        public double ConvertTemperature(double dFahrenheit)
        {
           return ((dFahrenheit - 32) * 5) / 9;
        }
    }
    

Description

La proprietà Description dell'attributo WebMethod fornisce una descrizione di un metodo del servizio Web XML che viene visualizzata nella pagina della Guida relativa al servizio. Il valore predefinito è una stringa vuota, a meno che non ne venga specificato uno diverso. Per ulteriori informazioni, vedere Proprietà WebMethodAttribute.Description.

Per fornire una descrizione di un metodo del servizio Web XML

  • Utilizzare la proprietà Description dell'attributo WebMethod, come viene illustrato di seguito:

    Public Class Service1
        Inherits System.Web.Services.WebService
        <System.Web.Services.WebMethod( _
           Description:="This method converts a temperature " & _
           "in degrees Fahrenheit to a temperature in degrees Celsius.")> _
        Public Function ConvertTemperature(ByVal dFahrenheit As Double) _
                                           As Double
            ConvertTemperature = ((dFahrenheit - 32) * 5) / 9
        End Function
    End Class
    
    public class Service1 : System.Web.Services.WebService
    { 
        [System.Web.Services.WebMethod(
           Description="Converts F to C a temperature in " +
           "degrees Fahrenheit to a temperature in degrees Celsius.")]
        public double ConvertTemperature(double dFahrenheit)
        {
           return ((dFahrenheit - 32) * 5) / 9;
        }
    }
    

EnableSession

La proprietà EnableSession dell'attributo WebMethod attiva lo stato sessione per un metodo del servizio Web XML. Una volta attivato, il servizio Web XML può accedere all'insieme stato sessione direttamente da HttpContext.Current.Session o con la proprietà WebService.Session se eredita dalla classe base WebService. Il valore predefinito è false, a meno che non ne venga specificato uno diverso. Per ulteriori informazioni, vedere Proprietà WebMethodAttribute.EnableSession.

Per attivare lo stato sessione in un metodo del servizio Web XML

  • Utilizzare la proprietà EnableSession dell'attributo WebMethod, come viene illustrato di seguito:

    Public Class Service1
        Inherits System.Web.Services.WebService
        <System.Web.Services.WebMethod(EnableSession:=True)> _
        Public Function ConvertTemperature(ByVal dFahrenheit As Double) _
                                           As Double
            Session("Conversions") = Session("Conversions") + 1
            ConvertTemperature = ((dFahrenheit - 32) * 5) / 9
        End Function
        <System.Web.Services.WebMethod(EnableSession:=True)> _
        Public Function GetNumberOfConversions() As Integer
            GetNumberOfConversions = Session("Conversions")
        End Function
    End Class
    
    public class Service1 : System.Web.Services.WebService
    { 
        [System.Web.Services.WebMethod(EnableSession=true)]
        public double ConvertTemperature(double dFahrenheit)
        {
           Session["Conversions"] = (int) Session["Conversions"] + 1;
           return ((dFahrenheit - 32) * 5) / 9;
        }
        [System.Web.Services.WebMethod(EnableSession=true)]
        public int GetNumberOfConversions()
        {
           return (int) Session["Conversions"];
        }
    }
    

MessageName

La proprietà MessageName dell'attributo WebMethod consente al servizio Web XML di identificare in modo univoco i metodi di overload tramite un alias. Il valore predefinito è il nome del metodo, a meno che non ne venga specificato uno diverso. Quando si specifica MessageName, i messaggi SOAP ottenuti rifletteranno questo nome e non il vero nome del metodo. Per ulteriori informazioni, vedere Proprietà WebMethodAttribute.MessageName.

Per fornire un nome di messaggio per un metodo del servizio Web XML

  • Utilizzare la proprietà MessageName dell'attributo WebMethod, come viene illustrato di seguito:

    Public Class Service1
        Inherits System.Web.Services.WebService
        <System.Web.Services.WebMethod(MessageName:="AddDoubles")> _
        Public Function Add(ByVal dValueOne As Double, _
                            ByVal dValueTwo As Double) As Double
            Add = dValueOne + dValueTwo
        End Function
        <System.Web.Services.WebMethod(MessageName:="AddIntegers")> _
        Public Function Add(ByVal iValueOne As Integer, _
                            ByVal iValueTwo As Integer) As Integer
            Add = iValueOne + iValueTwo
        End Function
    End Class
    
    public class Service1 : System.Web.Services.WebService
    { 
        [System.Web.Services.WebMethod(MessageName="AddDoubles")]
        public double Add(double dValueOne, double dValueTwo)
        {
           return dValueOne + dValueTwo;
        }
        [System.Web.Services.WebMethod(MessageName="AddIntegers")]
        public int Add(int iValueOne, int iValueTwo)
        {
           return iValueOne + iValueTwo;
        }
    }
    

    Il messaggio di richiesta SOAP del metodo che aggiunge valori double, AddDoubles, avrà una struttura simile a quella riportata di seguito:

    POST /myWebService/Service1.asmx HTTP/1.1
    Host: localhost
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    SOAPAction: "http://tempuri.org/AddDoubles"
    
    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <AddDoubles xmlns="http://tempuri.org/">
          <dValueOne>double</dValueOne>
          <dValueTwo>double</dValueTwo>
        </AddDoubles>
      </soap:Body>
    </soap:Envelope>
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    

    Il messaggio di risposta SOAP del metodo che aggiunge valori double, AddDoubles, avrà una struttura simile a quella riportata di seguito:

    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <AddDoublesResponse xmlns="http://tempuri.org/">
          <AddDoublesResult>double</AddDoublesResult>
        </AddDoublesResponse>
      </soap:Body>
    </soap:Envelope>
    

TransactionOption

La proprietà TransactionOption dell'attributo WebMethod consente al metodo del servizio Web XML di partecipare in qualità di oggetto di primo livello di una transazione. Sebbene sia possibile impostare la proprietà TransactionOption su uno qualsiasi dei valori dell'enumerazione TransactionOption, un metodo del servizio Web XML può avere solo due comportamenti possibili: non partecipare a una transazione (Disabled, NotSupported, Supported) oppure creare una nuova transazione (Required, RequiresNew). Il valore predefinito è TransactionOption.Disabled, a meno che non ne venga specificato uno diverso. Per ulteriori informazioni, vedere Proprietà WebMethodAttribute.TransactionOption.

Oltre ai prerequisiti necessari per qualsiasi metodo del servizio Web XML, occorre aggiungere un riferimento a System.EnterpriseServices.dll. Questo spazio dei nomi contiene metodi e proprietà che espongono il modello di transazione distribuita dei servizi COM+. La classe System.EnterpriseServices.ContextUtil consente di votare sulla transazione utilizzando i metodi SetAbort o SetComplete. Per ulteriori informazioni, vedere Partecipazione a transazioni in servizi Web XML creati con ASP.NET e Transazioni automatiche e servizi Web XML.

Per creare una nuova transazione con un metodo del servizio Web XML

  1. Aggiungere un riferimento a System.EnterpriseServices.dll. Per ulteriori informazioni, vedere Aggiunta e rimozione di riferimenti.

  2. Aggiungere lo spazio dei nomi System.EnterpriseServices al servizio Web XML, come viene illustrato di seguito:

    Imports System.EnterpriseServices
    
    using System.EnterpriseServices;
    
  3. Utilizzare la proprietà TransactionOption dell'attributo WebMethod, come viene illustrato di seguito:

    Public Class Service1
        Inherits System.Web.Services.WebService
        <System.Web.Services.WebMethod( _
           TransactionOption:=TransactionOption.RequiresNew)> _
        Public Function DoSomethingTransactional() As String
           'The transaction was successful...
           ContextUtil.SetComplete
           DoSomethingTransactional = ContextUtil.TransactionId.ToString()
        End Function
    End Class
    
    public class Service1 : System.Web.Services.WebService
    { 
        [System.Web.Services.WebMethod(
           TransactionOption=TransactionOption.RequiresNew)]
        public string DoSomethingTransactional()
        {
           // The transaction was successful...
           ContextUtil.SetComplete();
           return ContextUtil.TransactionId.ToString();
        }
    }
    

Vedere anche

Riferimenti

WebMethodAttribute

Altre risorse

Creazione di servizi Web in codice gestito