ContractDescription Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Descrive un contratto Windows Communication Foundation (WCF) che specifica ciò che un endpoint comunica al mondo esterno.
public ref class ContractDescription
public class ContractDescription
type ContractDescription = class
Public Class ContractDescription
- Ereditarietà
-
ContractDescription
Esempio
Nell'esempio seguente vengono illustrati diversi modi per creare o recuperare un oggetto ContractDescription. Vengono inoltre visualizzate le varie informazioni memorizzate 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 consiste in uno scambio di messaggi. Ad esempio, un messaggio di richiesta e un messaggio di risposta associato costituiscono uno scambio di messaggi di tipo request/reply.
Un ContractDescription oggetto viene usato per descrivere i contratti WCF e le relative operazioni. All'interno di un elemento ContractDescription, ogni operazione del contratto dispone di una classe OperationDescription corrispondente che descrive gli aspetti di tutte le operazioni che fanno parte del contratto, ad esempio se si tratta di un'operazione unidirezionale o di tipo request/reply. Ogni classe OperationDescription descrive inoltre i messaggi che costituiscono l'operazione, utilizzando una raccolta di MessageDescriptionCollection. ContractDescription contiene un riferimento a un'interfaccia che definisce il contratto utilizzando il modello di programmazione. Questa interfaccia è contrassegnata con ServiceContractAttribute e i metodi che corrispondono alle operazioni dell'endpoint sono contrassegnati con OperationContractAttribute.
Un contratto duplex definisce i set logici di operazioni seguenti:
Un set che il servizio espone affinché possa essere chiamato dal client.
Un set che il client espone affinché possa essere chiamato dal servizio.
Il modello di programmazione per la definizione di un contratto duplex consiste nel dividere ogni set in un'interfaccia separata e applicare gli attributi a ogni interfaccia. In questo caso, ContractDescription contiene un riferimento a ognuna di queste interfacce che consente di raggrupparle in un contratto duplex.
Come per le associazioni, ogni contratto è dotato di un Name e di un Namespace che lo identificano in modo univoco nei metadati del servizio.
Costruttori
ContractDescription(String) |
Inizializza una nuova istanza della classe ContractDescription con un nome specificato. |
ContractDescription(String, String) |
Inizializza una nuova istanza della classe ContractDescription con il nome completo dello spazio dei nomi specificato. |
Proprietà
Behaviors |
Ottiene i comportamenti associati alla descrizione del contratto. |
CallbackContractType |
Ottiene o imposta il tipo di contratto di callback specificato nella descrizione del contratto. |
ConfigurationName |
Ottiene o imposta il nome della configurazione per la descrizione del contratto. |
ContractBehaviors |
Ottiene la raccolta dei comportamenti del contratto. |
ContractType |
Ottiene o imposta il tipo di contratto specificato nella descrizione del contratto. |
HasProtectionLevel |
Ottiene un valore che indica se è stato impostato un livello di protezione per il contratto. |
Name |
Ottiene o imposta il nome del contratto. |
Namespace |
Ottiene o imposta lo spazio dei nomi per il contratto. |
Operations |
Ottiene una raccolta di descrizioni di operazioni associate al contratto. |
ProtectionLevel |
Ottiene o imposta il livello di protezione associato al contratto. |
SessionMode |
Ottiene o imposta un valore che indica se è necessaria una sessione per il contratto. |
Metodi
Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
GetContract(Type) |
Restituisce la descrizione del contratto per un tipo di contratto specificato. |
GetContract(Type, Object) |
Restituisce la descrizione del contratto per un tipo di contratto e un'implementazione del servizio specificati. |
GetContract(Type, Type) |
Restituisce la descrizione del contratto per un tipo di contratto e un tipo di servizio specificati. |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetInheritedContracts() |
Restituisce una raccolta di descrizioni del contratto ereditate dalla descrizione del contratto corrente. |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
ShouldSerializeProtectionLevel() |
Restituisce un valore che indica se la proprietà ProtectionLevel è cambiata rispetto al valore predefinito e deve essere serializzata. |
ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |