ContractDescription Classe

Definição

Descreve um contrato da Windows Communication Foundation (WCF) que especifica o que um endpoint comunica ao mundo exterior.

public ref class ContractDescription
public class ContractDescription
type ContractDescription = class
Public Class ContractDescription
Herança
ContractDescription

Exemplos

O exemplo seguinte mostra várias formas de criar ou recuperar um ContractDescription objeto. Depois, apresenta as várias informações armazenadas no ContractDescription objeto.

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

Observações

Um contrato WCF é um conjunto de operações que especifica o que o endpoint comunica ao mundo exterior. Cada operação é uma troca de mensagens. Por exemplo, uma mensagem de pedido e uma mensagem de resposta associada formam uma troca de mensagens de pedido/resposta.

Um ContractDescription objeto é usado para descrever contratos WCF e as suas operações. Dentro de um ContractDescription, cada operação contratual tem um correspondente OperationDescription que descreve aspetos de cada operação que faz parte do contrato, como se a operação é unidirecional ou pedido/resposta. Cada um OperationDescription também descreve as mensagens que compõem a operação usando um MessageDescriptionCollection. ContractDescription contém uma referência a uma interface que define o contrato usando o modelo de programação. Esta interface é marcada com ServiceContractAttribute e os seus métodos que correspondem às operações de endpoint são marcados com o OperationContractAttribute.

Um contrato duplex define os seguintes conjuntos lógicos de operações:

  • Um conjunto que o serviço expõe para o cliente chamar.

  • Um conjunto que o cliente expõe para o serviço chamar.

O modelo de programação para definir um contrato duplex é dividir cada conjunto numa interface separada e aplicar atributos a cada interface. Neste caso, ContractDescription contém uma referência a cada uma das interfaces que as agrupa num único contrato duplex.

Semelhante às vinculações, cada contrato tem um Name e Namespace que o identifica de forma única nos metadados do serviço.

Construtores

Name Description
ContractDescription(String, String)

Inicializa uma nova instância da ContractDescription classe com um nome qualificado para espaço de nomes especificado.

ContractDescription(String)

Inicializa uma nova instância da ContractDescription classe com um nome especificado.

Propriedades

Name Description
Behaviors

Obtém os comportamentos associados à descrição do contrato.

CallbackContractType

Obtém ou define o tipo de contrato de callback que a descrição do contrato especifica.

ConfigurationName

Obtém ou define o nome da configuração para a descrição do contrato.

ContractBehaviors

Recebe a coleção de comportamentos para o contrato.

ContractType

Obtém ou define o tipo de contrato que a descrição do contrato especifica.

HasProtectionLevel

Recebe um valor que indica se o contrato teve um nível de proteção definido.

Name

Obtém ou define o nome do contrato.

Namespace

Obtém ou define o espaço de nomes para o contrato.

Operations

Obtém a coleção de descrições de operações associadas ao contrato.

ProtectionLevel

Obtém ou definem o nível de proteção de segurança associado ao contrato.

SessionMode

Recebe ou define um valor que indica se uma sessão é exigida pelo contrato.

Métodos

Name Description
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetContract(Type, Object)

Devolve a descrição do contrato para um tipo específico de contrato e implementação de serviços.

GetContract(Type, Type)

Devolve a descrição do contrato para um tipo específico de contrato e um tipo específico de serviço.

GetContract(Type)

Devolve a descrição do contrato para um tipo específico de contrato.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetInheritedContracts()

Devolve uma coleção de descrições contratuais herdadas pela descrição atual do contrato.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ShouldSerializeProtectionLevel()

Devolve um valor que indica se a ProtectionLevel propriedade mudou em relação ao seu valor padrão e deve ser serializada.

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a