OperationContractAttribute Classe

Definição

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

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 exemplo de código a seguir 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 a seguir é um serviço que implementa um contrato de serviço implícito que especifica três operações. Duas das operações são operações bidirecionais, que retornam mensagens de resposta subjacentes ao chamador, independentemente do valor retornado. 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;  
  }  
}  

Comentários

Aplique o OperationContractAttribute método 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 em metadados:

  • A Action propriedade especifica a ação que identifica exclusivamente essa operação. O WCF envia mensagens de solicitação para métodos com base em sua ação.

  • A AsyncPattern propriedade indica que a operação é 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 definida explicitamente.

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

  • A IsInitiating propriedade especifica se essa operação pode ser a operação inicial em uma sessão.

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

  • A ProtectionLevel propriedade especifica a segurança no 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 em um contrato de serviço. Somente os métodos atribuídos com os OperationContractAttribute são expostos como operações de serviço. Um contrato de serviço sem métodos marcados com as OperationContractAttribute operações não expõe.

A AsyncPattern propriedade indica que um par de Begin<methodName> métodos e End<methodName> um par formam uma única operação implementada de forma assíncrona (seja no cliente ou no serviço). A capacidade de um serviço de implementar operações de forma assíncrona é um detalhe de implementação de serviço e não é exposta em metadados (como WSDL (Linguagem de Descrição de Serviços Web)).

Da mesma forma, os clientes podem optar por invocar operações de forma assíncrona independente de como o método de serviço é implementado. Chamar operações de serviço de forma assíncrona no cliente é recomendado quando um método de serviço leva algum tempo, mas deve retornar informações diretamente ao cliente. Para obter detalhes, consulte AsyncPattern.

A IsOneWay propriedade indica que um método não retorna nenhum valor, incluindo uma mensagem de resposta subjacente vazia. Esse tipo de método é útil para notificações ou comunicação no estilo de evento. Métodos desse tipo não podem retornar uma mensagem de resposta, portanto, a declaração do método deve retornar void.

Importante

Ao recuperar programaticamente o repositório de informações nesse atributo, use a ContractDescription classe em vez de refletir.

Observação

Se a IsOneWay propriedade estiver definida como false, (o padrão), mesmo os métodos que retornam void são métodos bidirecionais no nível da mensagem subjacente. Nesse caso, a infraestrutura cria e envia uma mensagem vazia para indicar ao chamador que o método retornou. O uso dessa abordagem permite que o aplicativo e a infraestrutura enviem informações de erro (como uma falha soap) de volta para o cliente. true A configuração IsOneWay é a única maneira de impedir a criação e a expedição de uma mensagem de resposta. Para obter mais informações, consulte Serviços Unidirecionais.

As Action propriedades e ReplyAction as propriedades podem ser usadas não apenas para modificar a ação padrão das mensagens SOAP, mas também para criar manipuladores para mensagens não reconhecidas ou para desabilitar a adição de ações para programação de mensagens diretas. Use a IsInitiating propriedade para impedir que os clientes chamem uma determinada operação de serviço antes de outras operações. Use a IsTerminating propriedade para que o WCF feche o canal depois que os clientes chamarem uma operação de serviço específica. Para obter mais informações, consulte Como usar sessões.

A ProtectionLevel propriedade permite que você especifique no contrato de operação se as mensagens de operação são assinadas, criptografadas ou assinadas e criptografadas. Se uma associação não puder fornecer o nível de segurança exigido pelo contrato, uma exceção será lançada em tempo de execução. Para obter mais informações, consulte ProtectionLevel e noções básicas sobre o nível de proteção.

Construtores

OperationContractAttribute()

Inicializa uma nova instância da classe OperationContractAttribute.

Propriedades

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 methodName> e End<methodName> em um contrato de serviço.

HasProtectionLevel

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

IsInitiating

Obtém ou define um valor que indica se o método implementa uma operação que pode iniciar uma sessão no servidor (se essa sessão existir).

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 o servidor fechar a sessão depois que a mensagem de resposta, se houver, for enviada.

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 ambos.

ReplyAction

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

TypeId

Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute.

(Herdado de Attribute)

Métodos

Equals(Object)

Retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
GetHashCode()

Retorna o código hash para a instância.

(Herdado de Attribute)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsDefaultAttribute()

Quando substituído em uma classe derivada, indica se o valor dessa instância é o valor padrão para a classe derivada.

(Herdado de Attribute)
Match(Object)

Quando substituído em uma classe derivada, retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

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

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição.

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

Recupera as informações de tipo para um objeto, que pode ser usado para obter as informações de tipo para uma interface.

(Herdado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

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

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

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

(Herdado de Attribute)

Aplica-se a