Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase ServiceContractAttribute

 

Indica que una interfaz o una clase define un contrato de servicio en una aplicación Windows Communication Foundation (WCF).

Espacio de nombres:   System.ServiceModel
Ensamblado:  System.ServiceModel (en System.ServiceModel.dll)

System.Object
  System.Attribute
    System.ServiceModel.ServiceContractAttribute

[AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Interface, 
	Inherited = false, AllowMultiple = false)]
public sealed class ServiceContractAttribute : Attribute

NombreDescripción
System_CAPS_pubmethodServiceContractAttribute()

Inicializa una nueva instancia de la clase ServiceContractAttribute.

NombreDescripción
System_CAPS_pubpropertyCallbackContract

Obtiene o establece el tipo de contrato de devolución de llamada cuando el contrato es un contrato dúplex.

System_CAPS_pubpropertyConfigurationName

Obtiene o establece el nombre utilizado para buscar el servicio en un archivo de configuración de la aplicación.

System_CAPS_pubpropertyHasProtectionLevel

Obtiene un valor que indica si el miembro tiene un nivel de protección asignado.

System_CAPS_pubpropertyName

Obtiene o establece el nombre para el <portType> en el lenguaje de descripción de servicios Web (WSDL).

System_CAPS_pubpropertyNamespace

Obtiene o establece el espacio de nombres para el <portType> en el lenguaje de descripción de servicios Web (WSDL).

System_CAPS_pubpropertyProtectionLevel

Especifica si el enlace para el contrato debe admitir el valor de la propiedad ProtectionLevel.

System_CAPS_pubpropertySessionMode

Obtiene o establece si se permiten sesiones, si no se permiten o si son necesarias.

System_CAPS_pubpropertyTypeId

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

NombreDescripción
System_CAPS_pubmethodEquals(Object)

Esta API admite la infraestructura producto y no está diseñada para usarse directamente desde el código. Devuelve un valor que indica si esta instancia es igual que un objeto especificado.(Heredado de Attribute).

System_CAPS_pubmethodGetHashCode()

Devuelve el código hash de esta instancia.(Heredado de Attribute).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_pubmethodIsDefaultAttribute()

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

System_CAPS_pubmethodMatch(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).

System_CAPS_pubmethodToString()

Devuelve una cadena que representa el objeto actual.(Heredado de Object).

NombreDescripción
System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.(Heredado de Attribute).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_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).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfoCount(UInt32)

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

System_CAPS_pubinterfaceSystem_CAPS_privmethod_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).

Utilice el atributo ServiceContractAttribute en una interfaz (o clase) para definir un contrato de servicio. A continuación, utilice el atributo OperationContractAttribute en uno o varios de los métodos de clase (o interfaz) para definir las operaciones de servicio del contrato. Cuando el contrato de servicio se implementa y combina con un Enlaces de Windows Communication Foundation y un objeto EndpointAddress, el contrato de servicio se expondrá para que los clientes lo usen. Para ver una descripción general del proceso con ejemplos simples, consulte Tutorial de introducción. Para obtener más información sobre la creación de contratos de servicio, consulte Diseño e implementación de servicios.

La información expresada por ServiceContractAttribute y su interfaz está relacionada con el elemento <portType> del lenguaje de descripción de servicios Web (WSDL). Un contrato de servicio se usa en el lado del servicio para especificar lo que el extremo del servicio expone a los autores de las llamadas. También se utiliza en el lado del cliente para especificar el contrato del extremo con el que el cliente se comunica y, en el caso de contratos dúplex, para especificar el contrato de devolución de llamada (mediante la propiedad CallbackContract) que el cliente debe implementar para participar en una conversación dúplex.

System_CAPS_noteNota

Una interfaz o clase decorada con ServiceContractAttribute también debe tener por lo menos un método marcado con el atributo OperationContractAttribute para exponer cualquier funcionalidad. Consulte la sección Ejemplos para ver un ejemplo de código del uso más simple de los dos atributos para definir e implementar un servicio.

Utilice las propiedades ServiceContractAttribute para modificar el contrato de servicio.

  • La propiedad ConfigurationName especifica el nombre del elemento de servicio en el archivo de configuración que se va a usar.

  • Las propiedades Name y Namespace controlan el nombre y espacio de nombres del contrato en el elemento <portType> de WSDL.

  • La propiedad SessionMode especifica si el contrato requiere un enlace que admita sesiones.

  • La propiedad CallbackContract especifica el contrato de devolución en una conversación bidireccional (dúplex).

  • Las propiedades HasProtectionLevel y ProtectionLevel indican si todos los mensajes que admiten el contrato tienen un valor ProtectionLevel explícito, y en ese caso, qué nivel es.

Los servicios implementan contratos de servicio, que representan el intercambio de datos que un tipo de servicio admite. Una clase de servicio puede implementar un contrato de servicio (implementando una interfaz marcada con ServiceContractAttribute que tiene los métodos marcados con OperationContractAttribute) o se puede marcar con ServiceContractAttribute y aplicar el atributo OperationContractAttribute a sus propios métodos. (Si una clase implementa una interfaz marcada con ServiceContractAttribute, no se podrá marcar con ServiceContractAttribute.) Los métodos en los tipos de servicio que se marcan con OperationContractAttribute se tratan como la parte de un contrato de servicio predeterminado especificado por el propio tipo de servicio. Para obtener información detallada sobre las operaciones de servicio, consulte OperationContractAttribute.

De forma predeterminada, las propiedades Name y Namespace son el nombre del tipo de contrato y http://tempuri.org, respectivamente, y ProtectionLevel es ProtectionLevel.None. Se recomienda que los contratos de servicio definan explícitamente los nombres, espacios de nombres y niveles de protección mediante estas propiedades. Al hacerlo, se logran dos objetivos. Primero, se crea un contrato que no está conectado directamente a la información del tipo administrado, lo que le permite refactorizar su código y espacios de nombres administrados sin interrumpir el contrato tal y como se expresa en WSDL. Segundo, exigir explícitamente un cierto nivel de protección en el propio contrato permite al tiempo de ejecución validar si la configuración de enlace admite ese nivel de seguridad, con lo que se evita que una configuración poco definida haga visible información confidencial. Para obtener más información acerca de los niveles de protección, consulte Descripción de los niveles de protección.

Para exponer un servicio para que lo usen las aplicaciones cliente, cree una aplicación host para registrar su extremo de servicio con Windows Communication Foundation (WCF). Puede hospedar los servicios WCF utilizando los Servicios de activación de Windows (WAS), en las siguientes aplicaciones: consola, Servicio de Windows, ASP.NET, Windows Forms o cualquier otro tipo de dominio de aplicación.

Hospedar en WAS es muy similar a crear una aplicación ASP.NET. Para obtener información detallada, vea Procedimiento para hospedar un servicio WCF en IIS.

Los clientes utilizan la interfaz de contrato de servicio (la interfaz marcada con ServiceContractAttribute) para crear un canal al servicio o utilizan los objetos de cliente (que combinan la información del tipo de la interfaz de contrato de servicio con la clase ClientBase<TChannel>) para comunicar con su servicio. Para obtener información detallada sobre los canales de cliente a los servicios, consulte la clase ChannelFactory<TChannel> y Introducción a un cliente WCF.

Utilizar una clase ServiceContractAttribute o interfaz para heredar de otra clase ServiceContractAttribute o interfaz extiende el contrato primario. Por ejemplo, si una interfaz IChildContract se marca con ServiceContractAttribute y hereda de otra interfaz de contrato de servicio, IParentContract, el contrato de servicio IChildContract contiene los métodos de IParentContract e IChildContract. Extender los contratos (en clases o interfaces) es muy similar a extender clases e interfaces administradas.

El enfoque más flexible para crear los servicios es definir primero las interfaces de contrato de servicio y después que la clase de servicio implemente esa interfaz. (Ésta también es la manera más simple de crear sus servicios si debe implementar contratos de servicio definidos por otros.) Crear servicios directamente marcando una clase con ServiceContractAttribute y sus métodos con OperationContractAttribute funciona cuando el servicio expone sólo un contrato (aunque más de un extremo pueden exponer ese contrato).

Utilice la propiedad CallbackContract para indicar otro contrato de servicio que, cuando se enlaza con el contrato de servicio original, define un intercambio de mensaje que puede fluir independientemente de dos maneras. Para obtener información detallada, vea CallbackContract.

El ejemplo de código siguiente muestra cómo aplicar ServiceContractAttribute a una interfaz para definir un contrato de servicio con un método de servicio, indicado por OperationContractAttribute. En este caso, el nivel de protección requerido de los enlaces para todos los mensajes es ProtectionLevel.EncryptAndSign.

Después, el ejemplo de código implementará ese contrato en la clase SampleService.

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

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(
    Namespace="http://microsoft.wcf.documentation",
    Name="SampleService",
    ProtectionLevel=ProtectionLevel.EncryptAndSign
  )]
  public interface ISampleService{
    [OperationContract]
    string SampleMethod(string msg);
  }

  class SampleService : ISampleService
  {
  #region ISampleService Members

  public string  SampleMethod(string msg)
  {
 	  return "The service greets you: " + msg;
  }

  #endregion
  }
}

El ejemplo de código siguiente muestra un archivo de configuración simple para el servicio anterior que crea un punto de conexión.

El ejemplo de código siguiente muestra un cliente que invoca el SampleService anterior.

using System;
using System.ServiceModel;
using System.ServiceModel.Channels;

public class Client
{
  public static void Main()
  {
    // Picks up configuration from the config file.
    SampleServiceClient wcfClient = new SampleServiceClient();
    try
    {
        // Making calls.
        Console.WriteLine("Enter the greeting to send: ");
        string greeting = Console.ReadLine();
        Console.WriteLine("The service responded: " + wcfClient.SampleMethod(greeting));

        Console.WriteLine("Press ENTER to exit:");
        Console.ReadLine();

        // Done with service. 
        wcfClient.Close();
        Console.WriteLine("Done!");
    }
    catch (TimeoutException timeProblem)
    {
      Console.WriteLine("The service operation timed out. " + timeProblem.Message);
      wcfClient.Abort();
      Console.Read();
    }
    catch(CommunicationException commProblem)
    {
      Console.WriteLine("There was a communication problem. " + commProblem.Message);
      wcfClient.Abort();
      Console.Read();
    }
  }
}

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 3.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: