ContractDescription Classe

Definição

Descreve um contrato do WCF (Windows Communication Foundation) que especifica o que um ponto de extremidade se comunica com o mundo exterior.

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

Exemplos

O exemplo a seguir mostra várias maneiras de criar ou recuperar um objeto ContractDescription. Em seguida, ele exibe as várias informações armazenadas no 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()

Comentários

Um contrato WCF é uma coleção de operações que especifica o que o ponto de extremidade se comunica com o mundo exterior. Cada operação é uma troca de mensagens. Por exemplo, uma mensagem de solicitação e uma mensagem de resposta associada formam uma troca de mensagens de solicitação/resposta.

Um objeto ContractDescription é usado para descrever os contratos do WCF e suas operações. Em um ContractDescription, cada operação de contrato tem uma OperationDescription correspondente que descreve aspectos de cada operação que faz parte do contrato, como se a operação é unidirecional ou solicitação/resposta. Cada 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. Essa interface é marcada com ServiceContractAttribute e seus métodos que correspondem às operações de ponto de extremidade 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 em uma interface separada e aplicar atributos a cada interface. Nesse caso, ContractDescription contém uma referência a cada uma das interfaces que as agrupa em um contrato duplex.

Semelhante às associações, cada contrato tem um Name e Namespace que o identificam exclusivamente nos metadados do serviço.

Construtores

ContractDescription(String, String)

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

ContractDescription(String)

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

Propriedades

Behaviors

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

CallbackContractType

Obtém ou define o tipo de contrato de retorno de chamada especificado pela descrição do contrato.

ConfigurationName

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

ContractBehaviors

Obtém a coleção de comportamento do contrato.

ContractType

Obtém ou define o tipo de contrato especificado pela descrição do contrato.

HasProtectionLevel

Obtém 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 namespace do contrato.

Operations

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

ProtectionLevel

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

SessionMode

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

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetContract(Type, Object)

Retorna a descrição do contrato para um tipo especificado de implementação de contrato e serviço.

GetContract(Type, Type)

Retorna a descrição do contrato para um tipo especificado de contrato e um tipo de serviço especificado.

GetContract(Type)

Retorna a descrição do contrato para um tipo de contrato especificado.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetInheritedContracts()

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

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
ShouldSerializeProtectionLevel()

Retorna um valor que indica se a propriedade ProtectionLevel foi alterada de seu valor padrão e deve ser serializada.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a