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) |