ContractDescription 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
엔드포인트가 외부 세계와 통신하는 것을 지정하는 WCF(Windows Communication Foundation) 계약에 대해 설명합니다.
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 있습니다. 각 OperationDescriptionMessageDescriptionCollection사용하여 작업을 구성하는 메시지에 대해서도 설명합니다. 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 속성이 기본값에서 변경되어 serialize되어야 하는지 여부를 나타내는 값을 반환합니다. |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
적용 대상
.NET