Compartilhar via


ContractDescription Classe

Definição

Descreve um contrato WCF (Windows Communication Foundation) que especifica o que um ponto de extremidade comunica ao mundo externo.

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 ContractDescription objeto. Em seguida, ele exibe 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()

Comentários

Um contrato WCF é uma coleção de operações que especifica o que o ponto de extremidade 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 ContractDescription objeto é usado para descrever os contratos do WCF e suas operações. Dentro de uma ContractDescription, cada operação de contrato tem um correspondente OperationDescription que descreve aspectos de cada operação que faz parte do contrato, como se a operação é unidirecional ou solicitação/resposta. Cada OperationDescription um 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 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 identifica exclusivamente nos metadados do serviço.

Construtores

ContractDescription(String)

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

ContractDescription(String, String)

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

Propriedades

Behaviors

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

CallbackContractType

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

ConfigurationName

Obtém ou define o nome de 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 que a descrição do contrato especifica.

HasProtectionLevel

Obtém um valor que indica se um nível de proteção foi definido para o contrato.

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 a sessão é exigida pelo contrato.

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetContract(Type)

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

GetContract(Type, Object)

Retorna a descrição do contrato de um tipo de contrato e de uma implementação de serviço especificados.

GetContract(Type, Type)

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

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 de contrato atual.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ShouldSerializeProtectionLevel()

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

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a