OperationContractAttribute Clase

Definición

Indica que un método define una operación que forma parte de un contrato de servicio en una aplicación 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
Herencia
OperationContractAttribute
Atributos

Ejemplos

El ejemplo de código siguiente muestra un contrato de servicio simple con una operación.

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

El ejemplo siguiente es un servicio que implementa un contrato de servicio implícito que especifica tres operaciones. Dos de las operaciones son bidireccionales, que devuelven mensajes de respuesta subyacentes al autor de la llamada sin tener en cuenta el valor devuelto. La tercera operación recibe una llamada, un mensaje entrante subyacente, pero no devuelve ningún mensaje de respuesta subyacente.

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

Comentarios

Aplique OperationContractAttribute a un método para indicar que el método implementa una operación de servicio como parte de un contrato de servicio (especificado por un atributo ServiceContractAttribute).

Use las propiedades OperationContractAttribute para controlar la estructura de la operación y los valores expresados en metadatos:

  • La propiedad Action especifica la acción que identifica de forma unívoca esta operación. WCF envía mensajes de solicitud a métodos en función de su acción.

  • La propiedad AsyncPattern indica que la operación se implementa o se puede llamar de forma asincrónica utilizando un par de métodos Begin/End.

  • La propiedad HasProtectionLevel indica si se ha definido de forma explícita la propiedad ProtectionLevel.

  • La propiedad IsOneWay indica que la operación solo consiste en un mensaje de entrada. La operación no tiene ningún mensaje de salida asociado.

  • La propiedad IsInitiating especifica si esta operación puede ser la operación inicial en una sesión.

  • La IsTerminating propiedad especifica si WCF intenta finalizar la sesión actual una vez completada la operación.

  • La propiedad ProtectionLevel especifica la seguridad del nivel de mensaje que una operación necesita en el tiempo de ejecución.

  • La propiedad ReplyAction especifica la acción del mensaje de respuesta para la operación.

El atributo OperationContractAttribute declara que un método es una operación en un contrato de servicio. Solo los métodos atribuidos a OperationContractAttribute se exponen como operaciones de servicio. Un contrato de servicio sin métodos marcado con OperationContractAttribute no expone ninguna operación.

La AsyncPattern propiedad indica que un par de Begin<methodName> métodos y End<methodName> forman una sola operación implementada de forma asincrónica (ya sea en el cliente o en el servicio). La capacidad de un servicio de implementar operaciones de forma asincrónica es un detalle de implementación de servicio y no está expuesto en metadatos (como el Lenguaje de descripción de servicios Web [WSDL]).

De igual forma, los clientes pueden decidir invocar de forma asincrónica las operaciones independientemente de cómo se implemente el método de servicio. Se recomienda llamar a las operaciones de servicio asincrónicas en el cliente cuando un método de servicio tarda algo de tiempo pero debe devolver la información directamente al cliente. Para obtener información detallada, vea AsyncPattern.

La propiedad IsOneWay indica que un método no devuelve ningún valor en absoluto, incluido un mensaje de respuesta subyacente vacío. Este tipo de método es útil para notificaciones o comunicaciones con estilo de eventos. Los métodos de este tipo no pueden devolver un mensaje de respuesta de manera que la declaración del método debe devolver el valor void.

Importante

Cuando recupere mediante programación el almacén de información de este atributo, use la ContractDescription clase en lugar de la reflexión.

Nota

Si la propiedad IsOneWay está establecida en false (el valor predeterminado), incluso los métodos que devuelven el valor void son métodos bidireccionales en el nivel de mensaje subyacente. En este caso, la infraestructura crea y envía un mensaje vacío para indicar al autor de la llamada que se ha devuelto el método. Utilizar este enfoque permite a la aplicación y a la infraestructura devolver información de error (como error de SOAP) al cliente. Establecer IsOneWay en true es la única manera de evitar la creación y distribución de un mensaje de respuesta. Para obtener más información, consulte Servicios unidireccionales.

Se pueden usar las propiedades Action y ReplyAction no solo para modificar la acción predeterminada de mensajes SOAP sino también para crear controladores para mensajes desconocidos o deshabilitar la adición de acciones para la programación directa del mensaje. Utilice la propiedad IsInitiating para evitar que los clientes llamen a una operación de servicio determinada antes de otras operaciones. Utilice la IsTerminating propiedad para que WCF cierre el canal después de que los clientes llamen a una operación de servicio determinada. Para obtener más información, consulte Uso de sesiones.

La propiedad ProtectionLevel le permite especificar en el contrato de la operación si los mensajes de la operación están firmados, cifrados, o firmados y cifrados. Si un enlace no puede proporcionar el nivel de seguridad exigido por el contrato, se producirá una excepción en el tiempo de ejecución. Para obtener más información, consulte ProtectionLevel y Descripción del nivel de protección.

Constructores

OperationContractAttribute()

Inicializa una nueva instancia de la clase OperationContractAttribute.

Propiedades

Action

Obtiene o establece la acción WS-Addressing del mensaje de solicitud.

AsyncPattern

Indica que una operación se implementa usando de forma asincrónica un par de métodos Begin<methodName> y End<methodName> en un contrato de servicio.

HasProtectionLevel

Obtiene un valor que indica si los mensajes para esta operación deben cifrarse, firmarse o ambos.

IsInitiating

Obtiene o establece un valor que indica si el método implementa una operación que puede iniciar una sesión en el servidor (si este tipo de sesión existe).

IsOneWay

Obtiene o establece un valor que indica si una operación devuelve un mensaje de respuesta.

IsTerminating

Obtiene o establece un valor que indica si la operación de servicio hace que el servidor cierre la sesión después de enviar el mensaje de respuesta, si lo hubiera.

Name

Obtiene o establece el nombre de la operación.

ProtectionLevel

Obtiene o establece un valor que especifica si los mensajes de una operación deben cifrarse, firmarse o ambos.

ReplyAction

Obtiene o establece el valor de la acción SOAP para el mensaje de respuesta de la operación.

TypeId

Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute.

(Heredado de Attribute)

Métodos

Equals(Object)

Devuelve un valor que indica si esta instancia es igual que un objeto especificado.

(Heredado de Attribute)
GetHashCode()

Devuelve el código hash de esta instancia.

(Heredado de Attribute)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
IsDefaultAttribute()

Si se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada.

(Heredado de Attribute)
Match(Object)

Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado.

(Heredado de Attribute)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Implementaciones de interfaz explícitas

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

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.

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

Obtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz.

(Heredado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1).

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

Proporciona acceso a las propiedades y los métodos expuestos por un objeto.

(Heredado de Attribute)

Se aplica a