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 會包含各個介面的參考,將它們組成一個雙工合約。

類似繫結,每個合約都有 NameNamespace,如此便可以在服務的中繼資料中唯一識別各個合約。

建構函式

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)

適用於