Поделиться через


ContractDescription Класс

Определение

Описывает контракт Windows Communication Foundation (WCF), указывающий, что конечная точка взаимодействует с внешним миром.

public ref class ContractDescription
public class ContractDescription
type ContractDescription = class
Public Class ContractDescription
Наследование
ContractDescription

Примеры

В следующем примере показано несколько способов создания или извлечения объекта ContractDescription. Затем отображается различные фрагменты информации, хранящиеся в объекте 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()

Комментарии

Контракт WCF — это коллекция операций, указывающих, что конечная точка взаимодействует с внешним миром. Каждая операция — это обмен сообщениями. Например, сообщение запроса и связанное сообщение ответа формируют обмен сообщениями запроса или ответа.

Объект ContractDescription используется для описания контрактов WCF и их операций. В ContractDescriptionкаждая операция контракта имеет соответствующий OperationDescription, описывающий аспекты каждой операции, являющейся частью контракта, например, односторонняя или ответная операция. Каждый OperationDescription также описывает сообщения, составляющие операцию с помощью MessageDescriptionCollection. ContractDescription содержит ссылку на интерфейс, определяющий контракт с помощью модели программирования. Этот интерфейс помечается ServiceContractAttribute, а его методы, соответствующие операциям конечной точки, помечены OperationContractAttribute.

Контракт дуплексного определяет следующие логические наборы операций:

  • Набор, предоставляемый службой для вызова клиента.

  • Набор, предоставляемый клиентом для вызова службы.

Модель программирования для определения дуплексного контракта заключается в разбиении каждого набора в отдельном интерфейсе и применении атрибутов к каждому интерфейсу. В этом случае ContractDescription содержит ссылку на каждый из интерфейсов, которые группирует их в один дуплексный контракт.

Как и привязки, каждый контракт имеет Name и Namespace, которые однозначно определяют его в метаданных службы.

Конструкторы

ContractDescription(String, String)

Инициализирует новый экземпляр класса ContractDescription с указанным именем пространства имен.

ContractDescription(String)

Инициализирует новый экземпляр класса ContractDescription с указанным именем.

Свойства

Behaviors

Возвращает поведение, связанное с описанием контракта.

CallbackContractType

Возвращает или задает тип контракта обратного вызова, который указывает описание контракта.

ConfigurationName

Возвращает или задает имя конфигурации для описания контракта.

ContractBehaviors

Возвращает коллекцию поведения для контракта.

ContractType

Возвращает или задает тип контракта, который указывает описание контракта.

HasProtectionLevel

Возвращает значение, указывающее, имеет ли контракт набор уровней защиты.

Name

Возвращает или задает имя контракта.

Namespace

Возвращает или задает пространство имен для контракта.

Operations

Возвращает коллекцию описаний операций, связанных с контрактом.

ProtectionLevel

Возвращает или задает уровень защиты безопасности, связанной с контрактом.

SessionMode

Возвращает или задает значение, указывающее, требуется ли сеанс контрактом.

Методы

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetContract(Type, Object)

Возвращает описание контракта для указанного типа реализации контракта и службы.

GetContract(Type, Type)

Возвращает описание контракта для указанного типа контракта и указанного типа службы.

GetContract(Type)

Возвращает описание контракта для указанного типа контракта.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetInheritedContracts()

Возвращает коллекцию описаний контракта, унаследованных текущим описанием контракта.

GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
ShouldSerializeProtectionLevel()

Возвращает значение, указывающее, изменилось ли свойство ProtectionLevel со значения по умолчанию и должно быть сериализовано.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к