Compartilhar via


Como: Use o atributo WebMethod

Anexando o atributo WebMethod a um método Public indica que você deseja o método exposto como parte do XML Web Service.Você também pode usar as propriedades deste atributo para configurar o comportamento do método do XML Web Service.Para obter mais informações, consulte Modelo de código para XML Web Services no código gerenciado.

O atributo WebMethod fornece as seguintes propriedades:

  • BufferResponse

  • CacheDuration

  • Descrição

  • EnableSession

  • MessageName

  • TransactionOption

BufferResponse

A propriedade BufferResponse do atributo WebMethod habilita o buffer de respostas para um método do XML Web Service.Quando definida como true, a configuração padrão, o ASP.NET faz um buffer inteiro da resposta antes de enviá-la para para o cliente.O buffer é muito eficiente e ajuda a melhorar o desempenho, minimizando a comunicação entre o processo ativo e o processo do IIS.Quando definida como false, o ASP.NET faz buffers da resposta em blocos de 16 KB.Normalmente, você deve definir essa propriedade para false somente se você não quiser todo o conteúdo da resposta na memória de uma só vez.Por exemplo, você está mandando de volta uma coleção que está transmitindo seus itens a partir de um banco de dados.A menos que seja especificado em contrário, o valor padrão é true.Para obter mais informações, consulte Propriedade WebMethodAttribute.BufferResponse.

Fazendo um buffer da resposta de um método de XML Web Service

  • Use a propriedade BufferResponse do atributo WebMethod, como mostrado abaixo:

    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

A propriedadeCacheDuration do atributo WebMethod permite fazer um cache dos resultados para um método de XML Web Service.O ASP.NET fará cache dos resultados para cada conjunto único de parâmetros.O valor desta propriedade especifica o número de segundos que o ASP.NET deve manter o cache dos resultados.Um valor de zero desativa o cache de resultados.A menos que seja especificado em contrário, o valor padrão é zero.Para obter mais informações, consulte Propriedade WebMethodAttribute.CacheDuration.

Armazenando em cache os resultados de um método de XML Web Service

  • Use a propriedade CacheDuration do atributo WebMethod , como mostrado abaixo:

    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;
        }
    }
    

Descrição

A propriedade Description do atributo WebMethod fornece uma descrição para um método de XML Web Service que será exibido na página de ajuda do serviço.A menos que seja especificado em contrário, o valor padrão é uma string vazia.Para obter mais informações, consulte Propriedade WebMethodAttribute.Description.

Fornecendo uma descrição para um método de XML Web Service

  • Use a propriedade Description do atributo WebMethod , como mostrado abaixo:

    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

A propriedade EnableSession do atributo WebMethod habilita o estado da sessão para um método de XML Web Service.Uma vez ativada, o XML Web Service pode acessar a coleção de estado da sessão diretamente do HttpContext.Current.Session ou com a propriedade WebService.Session, se ela herda a partir da classe base WebService.A menos que seja especificado em contrário, o valor padrão é false.Para obter mais informações, consulte Propriedade WebMethodAttribute.EnableSession.

Ativando o estado da sessão em um método de XML Web Service

  • Use a propriedade EnableSession do atributo WebMethod , como mostrado abaixo:

    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

A propriedade MessageName do atributo WebMethod permite o XML Web Service identificar cada método sobrecarregado usando um alias.A menos que seja especificado em contrário, o valor padrão é o nome do método.Ao especificar a propriedade MessageName, as mensagens SOAP resultantes refletirão esse nome em vez do nome original do método.Para obter mais informações, consulte Propriedade WebMethodAttribute.MessageName.

Fornecendo um nome de mensagem para um método de XML Web Service

  • Use a propriedade MessageName do atributo WebMethod , como mostrado abaixo:

    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;
        }
    }
    

    A mensagem de solicitação SOAP para o método que adiciona doubles, AddDoubles, será semelhante a seguir:

    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
    

    A mensagem de resposta SOAP para o método que adiciona doubles, AddDoubles, será semelhante a seguir:

    <?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

A propriedade TransactionOption do atributo WebMethod permite o método de XML Web Service participar como o objeto raiz de uma transação.Apesar de você poder definir a propriedade TransactionOption para qualquer valor da enumeração TransactionOption, um método de XML Web service só possui dois comportamentos possíveis; ele não participa de uma transação (Disabled, NotSupported, Supported), ou ele cria uma nova transação (Required, RequiresNew).A menos que seja especificado em contrário, o valor padrão é TransactionOption.desabilitado.Para obter mais informações, consulte Propriedade WebMethodAttribute.TransactionOption.

Em adição a pré-requisitos para qualquer método de serviço Web XML, você precisará adicionar uma referência a sistema.EnterpriseServices.dll.Este namespace contém métodos e propriedades que expõem o modelo de transação distribuída encontrado no serviços COM +.A classe System.EnterpriseServices.ContextUtil permite você votar na transação usando os métodos SetComplete ou SetAbort.Para obter mais informações, consulte Participando de transações nos XML Web Services criados com ASP.NET e Transações automáticas e XML Web Services.

Criando uma nova transação com um método de XML Web Service

  1. Adicione uma referência a sistema.EnterpriseServices.dll.Para obter mais informações, consulte Adicionando e Removendo Referências.

  2. Adicione o namespace System.EnterpriseServices ao XML Web Service, como mostrado abaixo:

    Imports System.EnterpriseServices
    
    using System.EnterpriseServices;
    
  3. Use a propriedade TransactionOption do atributo WebMethod, como mostrado abaixo:

    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();
        }
    }
    

Consulte também

Referência

WebMethodAttribute

Outros recursos

Criando Web Services em código gerenciado