OperationContractAttribute Classe

Definição

Indica que um método define uma operação que faz parte de um contrato de serviço numa aplicação do Windows Communication Foundation (WCF).

public ref class OperationContractAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method)]
public sealed class OperationContractAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method)>]
type OperationContractAttribute = class
    inherit Attribute
Public NotInheritable Class OperationContractAttribute
Inherits Attribute
Herança
OperationContractAttribute
Atributos

Exemplos

O seguinte exemplo de código mostra um contrato de serviço simples com uma operação.

using System;
using System.Collections.Generic;
using System.Net.Security;
using System.ServiceModel;
using System.Text;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(Namespace="Microsoft.WCF.Documentation")]
  public interface ISampleService{
    // This operation specifies an explicit protection level requirement.
    [OperationContract(ProtectionLevel=ProtectionLevel.EncryptAndSign)]
    string SampleMethod(string msg);
  }

  class SampleService : ISampleService
  {
  #region ISampleService Members

  public string  SampleMethod(string msg)
  {
    Console.WriteLine("Called with: {0}", msg);
      return "The service greets you: " + msg;
  }

  #endregion
  }
}
Imports System.Net.Security
Imports System.ServiceModel
Imports System.Text

Namespace Microsoft.WCF.Documentation
  <ServiceContract(Namespace:="Microsoft.WCF.Documentation")> _
  Public Interface ISampleService
    ' This operation specifies an explicit protection level requirement.
    <OperationContract(ProtectionLevel:=ProtectionLevel.EncryptAndSign)> _
    Function SampleMethod(ByVal msg As String) As String
  End Interface

  Friend Class SampleService
      Implements ISampleService
  #Region "ISampleService Members"

  Public Function SampleMethod(ByVal msg As String) As String Implements ISampleService.SampleMethod
    Console.WriteLine("Called with: {0}", msg)
       Return "The service greets you: " & msg
  End Function

  #End Region
  End Class
End Namespace

O exemplo seguinte é um serviço que implementa um contrato de serviço implícito que especifica três operações. Duas das operações são bidirecionais, que devolvem mensagens de resposta subjacentes ao chamador, independentemente do valor de retorno. A terceira operação recebe uma chamada, uma mensagem de entrada subjacente, mas não retorna nenhuma mensagem de resposta subjacente.

[ServiceContractAttribute]
public class OneAndTwoWay
{
  // The client waits until a response message appears.
  [OperationContractAttribute]
  public int MethodOne (int x, out int y)
  {
    y = 34;
    return 0;
  }

  // The client waits until an empty response message appears.
  [OperationContractAttribute]
  public void MethodTwo (int x)
  {
    return;
  }

  // The client returns as soon as an outbound message
  // is dispatched to the service; no response
  // message is generated or sent from the service.
  [OperationContractAttribute(IsOneWay=true)]
  public void MethodThree (int x)
  {
    return;
  }
}

Observações

Aplique o OperationContractAttribute a um método para indicar que o método implementa uma operação de serviço como parte de um contrato de serviço (especificado por um ServiceContractAttribute atributo).

Use as OperationContractAttribute propriedades para controlar a estrutura da operação e os valores expressos nos metadados:

  • A Action propriedade especifica a ação que identifica de forma única esta operação. O WCF despacha mensagens de pedido para métodos com base na sua ação.

  • A AsyncPattern propriedade indica que a operação está implementada ou pode ser chamada de forma assíncrona usando um par de métodos Begin/End.

  • A HasProtectionLevel propriedade indica se a ProtectionLevel propriedade foi explicitamente definida.

  • A IsOneWay propriedade indica que a operação consiste apenas numa única mensagem de entrada. A operação não tem mensagem de saída associada.

  • A IsInitiating propriedade especifica se esta operação pode ser a operação inicial numa sessão.

  • A IsTerminating propriedade especifica se a WCF tenta terminar a sessão atual após a conclusão da operação.

  • A ProtectionLevel propriedade especifica a segurança ao nível da mensagem que uma operação requer em tempo de execução.

  • A ReplyAction propriedade especifica a ação da mensagem de resposta para a operação.

O OperationContractAttribute atributo declara que um método é uma operação num contrato de serviço. Apenas os métodos atribuídos ao OperationContractAttribute são expostos como operações de serviço. Um contrato de serviço sem quaisquer métodos marcados com o OperationContractAttribute não expõe operações.

A AsyncPattern propriedade indica que um par de Begin<métodos Nome> e End<Nome do Método> forma uma única operação implementada de forma assíncrona (quer no cliente quer no serviço). A capacidade de um serviço implementar operações de forma assíncrona é um detalhe da implementação do serviço e não está exposta em metadados (como Web Services Description Language (WSDL)).

De forma semelhante, os clientes podem optar por invocar operações de forma assíncrona independentemente de como o método de serviço é implementado. É recomendado chamar operações de serviço de forma assíncrona no cliente quando um método de serviço demora algum tempo mas deve devolver informação diretamente ao cliente. Para obter detalhes, consulte AsyncPattern.

A IsOneWay propriedade indica que um método não retorna qualquer valor, incluindo uma mensagem de resposta subjacente vazia. Este tipo de método é útil para notificações ou comunicação ao estilo de eventos. Métodos deste tipo não podem devolver uma mensagem de resposta, pelo que a declaração do método deve devolver void.

Importante

Ao recuperar programaticamente o armazenamento de informação neste atributo, use a ContractDescription classe em vez de reflexão.

Note

Se a IsOneWay propriedade estiver definida para false, (o padrão), até os métodos que retornam void são métodos bidirecionais ao nível da mensagem subjacente. Neste caso, a infraestrutura cria e envia uma mensagem vazia para indicar ao chamador que o método retornou. A utilização desta abordagem permite que a aplicação e a infraestrutura enviem informações de erro (como uma falha SOAP) de volta ao cliente. Definir IsOneWay para true é a única forma de evitar a criação e o envio de uma mensagem de resposta. Para obter mais informações, consulte One-Way Services.

As Action propriedades e ReplyAction podem ser usadas não só para modificar a ação padrão das mensagens SOAP, mas também para criar manipuladores para mensagens não reconhecidas ou para desativar a adição de ações para programação de mensagens diretas. Utilize a IsInitiating propriedade para impedir que os clientes liguem para uma determinada operação de serviço antes de outras. Use a IsTerminating propriedade para que o WCF feche o canal depois de os clientes chamarem uma determinada operação de serviço. Para obter mais informações, consulte Utilizando Sessões.

A ProtectionLevel propriedade permite-lhe especificar no contrato de operação se as mensagens de operação são assinadas, encriptadas ou assinadas e encriptadas. Se uma vinculação não conseguir fornecer o nível de segurança exigido pelo contrato, é lançada uma exceção em tempo de execução. Para mais informações, consulte ProtectionLevele Compreender o Nível de Proteção.

Construtores

Name Description
OperationContractAttribute()

Inicializa uma nova instância da OperationContractAttribute classe.

Propriedades

Name Description
Action

Obtém ou define a ação WS-Addressing da mensagem de solicitação.

AsyncPattern

Indica que uma operação é implementada de forma assíncrona usando um Begin<par de métodos Nome> e End<método Nome> num contrato de serviço.

HasProtectionLevel

Obtém um valor que indica se as mensagens para esta operação devem ser criptografadas, assinadas ou ambas.

IsInitiating

Recebe ou define um valor que indica se o método implementa uma operação que pode iniciar uma sessão no servidor (caso tal sessão exista).

IsOneWay

Obtém ou define um valor que indica se uma operação retorna uma mensagem de resposta.

IsTerminating

Obtém ou define um valor que indica se a operação de serviço faz com que o servidor feche a sessão após o envio da mensagem de resposta, se houver.

Name

Obtém ou define o nome da operação.

ProtectionLevel

Obtém ou define um valor que especifica se as mensagens de uma operação devem ser criptografadas, assinadas ou ambas.

ReplyAction

Obtém ou define o valor da ação SOAP para a mensagem de resposta da operação.

TypeId

Quando implementado numa classe derivada, obtém um identificador único para esta Attribute.

(Herdado de Attribute)

Métodos

Name Description
Equals(Object)

Devolve um valor que indica se esta instância é igual a um objeto especificado.

(Herdado de Attribute)
GetHashCode()

Devolve o código de hash para esta instância.

(Herdado de Attribute)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsDefaultAttribute()

Quando sobrescrito numa classe derivada, indica se o valor desta instância é o valor padrão para a classe derivada.

(Herdado de Attribute)
Match(Object)

Quando sobrescrito numa classe derivada, devolve um valor que indica se esta instância é igual a um objeto especificado.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Implementações de Interface Explícita

Name Description
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de despacho.

(Herdado de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera a informação de tipo de um objeto, que pode ser usada para obter a informação de tipo para uma interface.

(Herdado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera o número de interfaces de informações de tipo que um objeto fornece (0 ou 1).

(Herdado de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Proporciona acesso a propriedades e métodos expostos por um objeto.

(Herdado de Attribute)

Aplica-se a