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)

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

ContractDescription(String, String)

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

Свойства

Behaviors

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

CallbackContractType

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

ConfigurationName

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

ContractBehaviors

Получает коллекцию поведения для контракта.

ContractType

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

HasProtectionLevel

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

Name

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

Namespace

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

Operations

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

ProtectionLevel

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

SessionMode

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

Методы

Equals(Object)

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

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

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

GetContract(Type, Object)

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

GetContract(Type, Type)

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

GetHashCode()

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

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

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

GetType()

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

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

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

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

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

ToString()

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

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

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