Condividi tramite


ContractDescription Classe

Definizione

Descrive un contratto Windows Communication Foundation (WCF) che specifica quali endpoint comunicano con l'esterno.

public ref class ContractDescription
public class ContractDescription
type ContractDescription = class
Public Class ContractDescription
Ereditarietà
ContractDescription

Esempio

L'esempio seguente illustra diversi modi per creare o recuperare un oggetto ContractDescription. Visualizza quindi le varie informazioni archiviate nell'oggetto 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()

Commenti

Un contratto WCF è una raccolta di operazioni che specifica l'endpoint che comunica con l'esterno. Ogni operazione è uno scambio di messaggi. Ad esempio, un messaggio di richiesta e un messaggio di risposta associato formano uno scambio di messaggi di richiesta/risposta.

Un oggetto ContractDescription viene usato per descrivere i contratti WCF e le relative operazioni. All'interno di un ContractDescription, ogni operazione del contratto ha un OperationDescription corrispondente che descrive gli aspetti di ogni operazione che fa parte del contratto, ad esempio se l'operazione è unidirezionale o richiesta/risposta. Ogni OperationDescription descrive anche i messaggi che costituiscono l'operazione usando un MessageDescriptionCollection. ContractDescription contiene un riferimento a un'interfaccia che definisce il contratto utilizzando il modello di programmazione. Questa interfaccia è contrassegnata con ServiceContractAttribute e i relativi metodi che corrispondono alle operazioni dell'endpoint sono contrassegnati con il OperationContractAttribute.

Un contratto duplex definisce i set logici di operazioni seguenti:

  • Set esposto dal servizio per consentire al client di chiamare.

  • Set esposto dal client per la chiamata del servizio.

Il modello di programmazione per la definizione di un contratto duplex consiste nel suddividere ogni set in un'interfaccia separata e applicare attributi a ogni interfaccia. In questo caso, ContractDescription contiene un riferimento a ognuna delle interfacce che le raggruppa in un unico contratto duplex.

Analogamente alle associazioni, ogni contratto ha un Name e Namespace che lo identificano in modo univoco nei metadati del servizio.

Costruttori

ContractDescription(String, String)

Inizializza una nuova istanza della classe ContractDescription con un nome completo dello spazio dei nomi specificato.

ContractDescription(String)

Inizializza una nuova istanza della classe ContractDescription con un nome specificato.

Proprietà

Behaviors

Ottiene i comportamenti associati alla descrizione del contratto.

CallbackContractType

Ottiene o imposta il tipo di contratto di callback specificato dalla descrizione del contratto.

ConfigurationName

Ottiene o imposta il nome di configurazione per la descrizione del contratto.

ContractBehaviors

Ottiene la raccolta di comportamenti per il contratto.

ContractType

Ottiene o imposta il tipo di contratto specificato dalla descrizione del contratto.

HasProtectionLevel

Ottiene un valore che indica se il contratto ha impostato un livello di protezione.

Name

Ottiene o imposta il nome del contratto.

Namespace

Ottiene o imposta lo spazio dei nomi per il contratto.

Operations

Ottiene la raccolta di descrizioni delle operazioni associate al contratto.

ProtectionLevel

Ottiene o imposta il livello di protezione della sicurezza associato al contratto.

SessionMode

Ottiene o imposta un valore che indica se una sessione è richiesta dal contratto.

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetContract(Type, Object)

Restituisce la descrizione del contratto per un tipo specificato di contratto e implementazione del servizio.

GetContract(Type, Type)

Restituisce la descrizione del contratto per un tipo di contratto specificato e un tipo di servizio specificato.

GetContract(Type)

Restituisce la descrizione del contratto per un tipo di contratto specificato.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetInheritedContracts()

Restituisce una raccolta di descrizioni dei contratti ereditate dalla descrizione del contratto corrente.

GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
ShouldSerializeProtectionLevel()

Restituisce un valore che indica se la proprietà ProtectionLevel è stata modificata rispetto al valore predefinito e deve essere serializzata.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a