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).Indicates that a method defines an operation that is part of a service contract in a Windows Communication Foundation (WCF) application.

public ref class OperationContractAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method)]
public sealed class OperationContractAttribute : Attribute
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.The following code example shows a simple service contract with one operation.

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.The following example is a service that implements an implicit service contract that specifies three operations. Dos de las operaciones son bidireccionales, que devuelven mensajes de respuesta subyacentes al autor de la llamada sin tener en cuenta el valor devuelto.Two of the operations are two-way operations, which return underlying response messages to the caller no matter what the return value is. La tercera operación recibe una llamada, un mensaje entrante subyacente, pero no devuelve ningún mensaje de respuesta subyacente.The third operation receives a call, an underlying inbound message, but returns no underlying response message.

[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).Apply the OperationContractAttribute to a method to indicate that the method implements a service operation as part of a service contract (specified by a ServiceContractAttribute attribute).

Use las propiedades OperationContractAttribute para controlar la estructura de la operación y los valores expresados en metadatos:Use the OperationContractAttribute properties to control the structure of the operation and the values expressed in metadata:

  • La propiedad Action especifica la acción que identifica de forma unívoca esta operación.The Action property specifies the action that uniquely identifies this operation. WCF envía mensajes de solicitud a los métodos según su acción.WCF dispatches request messages to methods based on their action.

  • 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.The AsyncPattern property indicates that the operation is implemented or can be called asynchronously using a Begin/End method pair.

  • La propiedad HasProtectionLevel indica si se ha definido de forma explícita la propiedad ProtectionLevel.The HasProtectionLevel property indicates whether the ProtectionLevel property has been explicitly set.

  • La propiedad IsOneWay indica que la operación solo consiste en un mensaje de entrada.The IsOneWay property indicates that the operation only consists of a single input message. La operación no tiene ningún mensaje de salida asociado.The operation has no associated output message.

  • La propiedad IsInitiating especifica si esta operación puede ser la operación inicial en una sesión.The IsInitiating property specifies whether this operation can be the initial operation in a session.

  • La propiedad IsTerminating especifica si WCF intenta finalizar la sesión actual una vez completada la operación.The IsTerminating property specifies whether WCF attempts to terminate the current session after the operation completes.

  • La propiedad ProtectionLevel especifica la seguridad del nivel de mensaje que una operación necesita en el tiempo de ejecución.The ProtectionLevel property specifies the message-level security that an operation requires at run time.

  • La propiedad ReplyAction especifica la acción del mensaje de respuesta para la operación.The ReplyAction property specifies the action of the reply message for the operation.

El atributo OperationContractAttribute declara que un método es una operación en un contrato de servicio.The OperationContractAttribute attribute declares that a method is an operation in a service contract. Solo los métodos atribuidos a OperationContractAttribute se exponen como operaciones de servicio.Only methods attributed with the OperationContractAttribute are exposed as service operations. Un contrato de servicio sin métodos marcado con OperationContractAttribute no expone ninguna operación.A service contract without any methods marked with the OperationContractAttribute exposes no operations.

La propiedad AsyncPattern indica que un par de Begin @ no__t-2methodname> y End @ no__t-5MethodName> métodos forman una operación única implementada de forma asincrónica (ya sea en el cliente o en el servicio).The AsyncPattern property indicates that a pair of Begin<methodName> and End<methodName> methods form a single operation implemented asynchronously (whether on the client or the service). 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]).The ability of a service to implement operations asynchronously is a service implementation detail and is not exposed in metadata (such as Web Services Description Language (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.Similarly, clients can choose to invoke operations asynchronously independent of how the service method is implemented. 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.Calling service operations asynchronously in the client is recommended when a service method takes some time but must return information directly to the client. Para obtener información detallada, vea AsyncPattern.For details, see AsyncPattern.

La propiedad IsOneWay indica que un método no devuelve ningún valor en absoluto, incluido un mensaje de respuesta subyacente vacío.The IsOneWay property indicates that a method does not return any value at all, including an empty underlying response message. Este tipo de método es útil para notificaciones o comunicaciones con estilo de eventos.This type of method is useful for notifications or event-style communication. 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.Methods of this kind cannot return a reply message so the method's declaration must return void.

Importante

Al recuperar mediante programación el almacén de información de este atributo, utilice la clase ContractDescription en lugar de la reflexión.When programmatically retrieving the information store in this attribute, use the ContractDescription class instead of reflection.

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.If the IsOneWay property is set to false, (the default), even methods that return void are two-way methods at the underlying message level. 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.In this case, the infrastructure creates and sends an empty message to indicate to the caller that the method has returned. Utilizar este enfoque permite a la aplicación y a la infraestructura devolver información de error (como error de SOAP) al cliente.Using this approach enables the application and the infrastructure to send error information (such as a SOAP fault) back to the client. Establecer IsOneWay en true es la única manera de evitar la creación y distribución de un mensaje de respuesta.Setting IsOneWay to true is the only way to prevent the creation and dispatch of a reply message. Para obtener más información, vea servicios unidireccionales.For more information, see One-Way Services.

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.The Action and ReplyAction properties can be used not only to modify the default action of SOAP messages but also to create handlers for unrecognized messages or to disable adding actions for direct message programming. Utilice la propiedad IsInitiating para evitar que los clientes llamen a una operación de servicio determinada antes de otras operaciones.Use the IsInitiating property to prevent clients from calling a particular service operation prior to other operations. Use la propiedad IsTerminating para que WCF cierre el canal después de que los clientes llamen a una operación de servicio determinada.Use the IsTerminating property to have WCF close the channel after clients call a particular service operation. Para obtener más información, vea usar sesiones.For more information, see Using Sessions.

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.The ProtectionLevel property enables you to specify on the operation contract whether the operation messages are signed, encrypted, or signed and encrypted. 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.If a binding cannot provide the security level required by the contract, an exception is thrown at run time. Para obtener más información, vea ProtectionLevel y Descripción del nivel de protección.For more information, see ProtectionLevel and Understanding Protection Level.

Constructores

OperationContractAttribute()

Inicializa una nueva instancia de la clase OperationContractAttribute.Initializes a new instance of the OperationContractAttribute class.

Propiedades

Action

Obtiene o establece la acción WS-Addressing del mensaje de solicitud.Gets or sets the WS-Addressing action of the request message.

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.Indicates that an operation is implemented asynchronously using a Begin<methodName> and End<methodName> method pair in a service contract.

HasProtectionLevel

Obtiene un valor que indica si los mensajes para esta operación deben cifrarse, firmarse o ambos.Gets a value that indicates whether the messages for this operation must be encrypted, signed, or both.

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).Gets or sets a value that indicates whether the method implements an operation that can initiate a session on the server (if such a session exists).

IsOneWay

Obtiene o establece un valor que indica si una operación devuelve un mensaje de respuesta.Gets or sets a value that indicates whether an operation returns a reply message.

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.Gets or sets a value that indicates whether the service operation causes the server to close the session after the reply message, if any, is sent.

Name

Obtiene o establece el nombre de la operación.Gets or sets the name of the operation.

ProtectionLevel

Obtiene o establece un valor que especifica si los mensajes de una operación deben cifrarse, firmarse o ambos.Gets or sets a value that specifies whether the messages of an operation must be encrypted, signed, or both.

ReplyAction

Obtiene o establece el valor de la acción SOAP para el mensaje de respuesta de la operación.Gets or sets the value of the SOAP action for the reply message of the operation.

TypeId

Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Heredado de Attribute)

Métodos

Equals(Object)

Devuelve un valor que indica si esta instancia es igual que un objeto especificado.Returns a value that indicates whether this instance is equal to a specified object.

(Heredado de Attribute)
GetHashCode()

Devuelve el código hash de esta instancia.Returns the hash code for this instance.

(Heredado de Attribute)
GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(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.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(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.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Heredado de Attribute)
MemberwiseClone()

Crea una copia superficial del Object actual.Creates a shallow copy of the current Object.

(Heredado de Object)
ToString()

Devuelve un valor de tipo string que representa el objeto actual.Returns a string that represents the current object.

(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.Maps a set of names to a corresponding set of dispatch identifiers.

(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.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Heredado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1).Retrieves the number of type information interfaces that an object provides (either 0 or 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.Provides access to properties and methods exposed by an object.

(Heredado de Attribute)

Se aplica a