Compartir a través de


ContractDescription Clase

Definición

Describe un contrato Windows Communication Foundation (WCF) que especifica lo que un punto de conexión comunica al mundo exterior.

public ref class ContractDescription
public class ContractDescription
type ContractDescription = class
Public Class ContractDescription
Herencia
ContractDescription

Ejemplos

El ejemplo siguiente muestra varias maneras de crear o recuperar un objeto ContractDescription. A continuación, muestra las distintas partes de información almacenadas en el objeto ContractDescription.

Uri baseAddress = new Uri("http://localhost:8001/Simple");
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);

serviceHost.AddServiceEndpoint(
    typeof(ICalculator),
    new WSHttpBinding(),
    "CalculatorServiceObject");

// Enable Mex
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
serviceHost.Description.Behaviors.Add(smb);

serviceHost.Open();

ContractDescription cd0 = new ContractDescription("ICalculator");
ContractDescription cd1 = new ContractDescription("ICalculator", "http://www.tempuri.org");
ContractDescription cd2 = ContractDescription.GetContract(typeof(ICalculator));
CalculatorService calcSvc = new CalculatorService();
ContractDescription cd3 = ContractDescription.GetContract(typeof(ICalculator), calcSvc);
ContractDescription cd4 = ContractDescription.GetContract(typeof(ICalculator), typeof(CalculatorService));
ContractDescription cd = serviceHost.Description.Endpoints[0].Contract;

Console.WriteLine("Displaying information for contract: {0}", cd.Name.ToString());

KeyedByTypeCollection<IContractBehavior> behaviors = cd.Behaviors;
Console.WriteLine("\tDisplay all behaviors:");
foreach (IContractBehavior behavior in behaviors)
{
    Console.WriteLine("\t\t" + behavior.ToString());
}

Type type = cd.CallbackContractType;

string configName = cd.ConfigurationName;
Console.WriteLine("\tConfiguration name: {0}", configName);

Type contractType = cd.ContractType;
Console.WriteLine("\tContract type: {0}", contractType.ToString());

bool hasProtectionLevel = cd.HasProtectionLevel;
if (hasProtectionLevel)
{
    ProtectionLevel protectionLevel = cd.ProtectionLevel;
    Console.WriteLine("\tProtection Level: {0}", protectionLevel.ToString());
}

string name = cd.Name;
Console.WriteLine("\tName: {0}", name);

string namespc = cd.Namespace;
Console.WriteLine("\tNamespace: {0}", namespc);

OperationDescriptionCollection odc = cd.Operations;
Console.WriteLine("\tDisplay Operations:");
foreach (OperationDescription od in odc)
{
    Console.WriteLine("\t\t" + od.Name);
}

SessionMode sm = cd.SessionMode;
Console.WriteLine("\tSessionMode: {0}", sm.ToString());

Collection<ContractDescription> inheretedContracts = cd.GetInheritedContracts();
Console.WriteLine("\tInherited Contracts:");
foreach (ContractDescription contractdescription in inheretedContracts)
{
    Console.WriteLine("\t\t" + contractdescription.Name);
}

Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();

// Close the ServiceHostBase to shutdown the service.
serviceHost.Close();
Dim baseAddress As New Uri("http://localhost:8001/Simple")
Dim serviceHost As New ServiceHost(GetType(CalculatorService), baseAddress)

serviceHost.AddServiceEndpoint(GetType(ICalculator), New WSHttpBinding(), "CalculatorServiceObject")

' Enable Mex
Dim smb As New ServiceMetadataBehavior()
smb.HttpGetEnabled = True
serviceHost.Description.Behaviors.Add(smb)

serviceHost.Open()

Dim cd0 As New ContractDescription("ICalculator")
Dim cd1 As New ContractDescription("ICalculator", "http://www.tempuri.org")
Dim cd2 As ContractDescription = ContractDescription.GetContract(GetType(ICalculator))
Dim calcSvc As New CalculatorService()
Dim cd3 As ContractDescription = ContractDescription.GetContract(GetType(ICalculator), calcSvc)
Dim cd4 As ContractDescription = ContractDescription.GetContract(GetType(ICalculator), GetType(CalculatorService))
Dim cd As ContractDescription = serviceHost.Description.Endpoints(0).Contract

Console.WriteLine("Displaying information for contract: {0}", cd.Name.ToString())

Dim behaviors As KeyedByTypeCollection(Of IContractBehavior) = cd.Behaviors
Console.WriteLine(Constants.vbTab & "Display all behaviors:")
For Each behavior As IContractBehavior In behaviors
    Console.WriteLine(Constants.vbTab + Constants.vbTab + CType(behavior, Object).ToString())
Next behavior

Dim type As Type = cd.CallbackContractType

Dim configName As String = cd.ConfigurationName
Console.WriteLine(Constants.vbTab & "Configuration name: {0}", configName)

Dim contractType As Type = cd.ContractType
Console.WriteLine(Constants.vbTab & "Contract type: {0}", contractType.ToString())

Dim hasProtectionLevel As Boolean = cd.HasProtectionLevel
If hasProtectionLevel Then
    Dim protectionLevel As ProtectionLevel = cd.ProtectionLevel
    Console.WriteLine(Constants.vbTab & "Protection Level: {0}", protectionLevel.ToString())
End If


Dim name As String = cd.Name
Console.WriteLine(Constants.vbTab & "Name: {0}", name)

Dim namespc As String = cd.Namespace
Console.WriteLine(Constants.vbTab & "Namespace: {0}", namespc)

Dim odc As OperationDescriptionCollection = cd.Operations
Console.WriteLine(Constants.vbTab & "Display Operations:")
For Each od As OperationDescription In odc
    Console.WriteLine(Constants.vbTab + Constants.vbTab + od.Name)
Next od

Dim sm As SessionMode = cd.SessionMode
Console.WriteLine(Constants.vbTab & "SessionMode: {0}", sm.ToString())

Dim inheretedContracts As Collection(Of ContractDescription) = cd.GetInheritedContracts()
Console.WriteLine(Constants.vbTab & "Inherited Contracts:")
For Each contractdescription As ContractDescription In inheretedContracts
    Console.WriteLine(Constants.vbTab + Constants.vbTab + contractdescription.Name)
Next contractdescription

Console.WriteLine("The service is ready.")
Console.WriteLine("Press <ENTER> to terminate service.")
Console.WriteLine()
Console.ReadLine()

' Close the ServiceHostBase to shutdown the service.
serviceHost.Close()

Comentarios

Un contrato WCF es una colección de operaciones que especifica lo que el punto de conexión se comunica con el mundo exterior. Cada operación es un intercambio de mensajes. Por ejemplo, un mensaje de solicitud y un mensaje de respuesta asociado forman un intercambio de mensajes solicitud/respuesta.

Un ContractDescription objeto se usa para describir los contratos de WCF y sus operaciones. Dentro de una ContractDescription, a cada operación del contrato le corresponde una OperationDescription que describe aspectos de todas las operaciones que forman parte del contrato, por ejemplo, si la operación es unidireccional o solicitud/respuesta. Cada OperationDescription también describe los mensajes que constituyen la operación mediante una colección MessageDescriptionCollection. ContractDescription contiene una referencia a una interfaz que define el contrato mediante el modelo de programación. Esta interfaz se marca con ServiceContractAttribute, y aquellos de sus métodos que corresponden con las operaciones del extremo se marcan con OperationContractAttribute.

Un contrato dúplex define los siguientes conjuntos lógicos de operaciones:

  • Conjunto que el servicio expone para el cliente al que va a llamar.

  • Conjunto que el cliente expone para el servicio al que va a llamar.

El modelo de programación para definir un contrato dúplex es dividir cada conjunto en una interfaz independiente y aplicar los atributos a cada una de ellas. En este caso, ContractDescription contiene una referencia a cada uno de las interfaces que los agrupa en un contrato dúplex.

Al igual que con los enlaces, cada contrato tiene un Name y un Namespace que lo identifican de manera única en los metadatos del servicio.

Constructores

ContractDescription(String)

Inicializa una nueva instancia de la clase ContractDescription con un nombre especificado.

ContractDescription(String, String)

Inicializa una nueva instancia de la clase ContractDescription con un nombre completo de espacio de nombres concreto.

Propiedades

Behaviors

Obtiene los comportamientos asociados a la descripción del contrato.

CallbackContractType

Obtiene o establece el tipo de contrato de devolución de llamada que la descripción del contrato especifica.

ConfigurationName

Obtiene o establece el nombre de la configuración para la descripción del contrato.

ContractBehaviors

Obtiene la colección de comportamientos para el contrato.

ContractType

Obtiene o establece el tipo de contrato que especifica su descripción.

HasProtectionLevel

Obtiene un valor que indica si se ha establecido un nivel de protección para el contrato.

Name

Obtiene o establece el nombre del contrato.

Namespace

Obtiene o establece el espacio de nombres del contrato.

Operations

Obtiene la colección de descripciones de la operación asociada al contrato.

ProtectionLevel

Obtiene o establece el nivel de protección de seguridad asociado al contrato.

SessionMode

Obtiene o establece un valor que indica si el contrato requiere o no una sesión.

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetContract(Type)

Devuelve la descripción del contrato de un tipo de contrato concreto.

GetContract(Type, Object)

Devuelve la descripción del contrato para un tipo especificado de contrato e implementación del servicio.

GetContract(Type, Type)

Devuelve la descripción del contrato para un tipo especificado de contrato y servicio.

GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetInheritedContracts()

Devuelve una colección de descripciones de contrato heredadas por la descripción del contrato actual.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ShouldSerializeProtectionLevel()

Devuelve un valor que indica si la propiedad ProtectionLevel ha cambiado respecto de su valor predeterminado y se debe serializar.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a