合約優先工作流程服務開發
從 .NET Framework 4.5 開始,Windows Workflow Foundation (WF) 即採用合約優先工作流程開發形式,在 Web 服務與工作流程之間提供更好的整合。 合約優先工作流程開發工具可讓您在 Code First 中設計合約。 此工具會自動在合約中的作業工具箱內產生活動範本。 本主題提供工作流程服務概觀,說明如何將工作流程服務中的活動和屬性 (property) 對應至服務合約的屬性 (attribute)。 如需建立合約優先工作流程服務的逐步範例,請參閱 HOW TO:建立取用現有服務合約的工作流程服務。
本主題內容
將服務合約屬性對應至工作流程屬性
下列各節中的表格會指定不同的 WCF 屬性 (attribute) 和屬性 (property),以及其如何對應至合約優先工作流程中的傳訊活動和屬性 (property)。
服務合約屬性
屬性名稱 | 支援 | 描述 | WF 驗證 |
---|---|---|---|
CallbackContract | No | 當合約是雙工合約時,取得或設定回呼合約的型別。 | (N/A) |
ConfigurationName | No | 取得或設定用來在應用程式組態檔中尋找服務的名稱。 | (N/A) |
HasProtectionLevel | Yes | 取得指出成員是否已指派保護層級的值。 | Receive.ProtectionLevel 不應為 null。 |
名稱 | Yes | 取得或設定 Web 服務描述語言 (WSDL) 中的 <portType> 項目名稱。 | Receive.ServiceContractName.LocalName 應相符。 |
Namespace | Yes | 取得或設定 Web 服務描述語言 (WSDL) 中的 <portType> 項目命名空間。 | Receive.ServiceContractName.NameSpace 應相符 |
ProtectionLevel | Yes | 指定合約的繫結是否必須支援 ProtectionLevel 屬性的值。 | Receive.ProtectionLevel 應相符。 |
SessionMode | No | 取得或設定是否允許工作階段、不允許工作階段,或需要工作階段。 | (N/A) |
TypeId | No | 在衍生類別中實作時,取得這個屬性的唯一識別碼。 (繼承自屬性。) | (N/A) |
在此插入子區段主體。
作業合約屬性
屬性名稱 | 支援 | 描述 | WF 驗證 |
---|---|---|---|
動作 | Yes | 取得或設定要求訊息的 WS-Addressing 動作。 | Receive.Action 應相符。 |
AsyncPattern | No | 表示某個作業採用服務合約中的 Begin<methodName> 與 End<methodName> 方法配對,以非同步方式實作。 | (N/A) |
HasProtectionLevel | Yes | 取得指出此作業的訊息是否必須加密及/或簽署的值。 | Receive.ProtectionLevel 不應為 null。 |
IsInitiating | No | 取得或設定值,以指出該方法是否實作可以在伺服器上初始化工作階段的作業 (若這樣的工作階段存在的話)。 | (N/A) |
IsOneWay | Yes | 取得或設定值,這個值會指出作業是否傳回回覆訊息。 | (沒有此 Receive 的 SendReply,或者沒有此 Send 的 ReceiveReply)。 |
IsTerminating | No | 取得或設定值,這個值表示服務作業在傳送回覆訊息 (如果有的話) 之後,是否導致伺服器關閉該工作階段。 | (N/A) |
名稱 | Yes | 取得或設定作業的名稱。 | Receive.OperationName 應相符。 |
ProtectionLevel | Yes | 取得或設定值,此值指定某個作業的訊息是否須加密、簽署,或兩者都進行。 | Receive.ProtectionLevel 應相符。 |
ReplyAction | Yes | 取得或設定作業之回覆訊息的 SOAP 動作值。 | SendReply.Action 應相符。 |
TypeId | No | 在衍生類別中實作時,取得這個屬性的唯一識別碼。 (繼承自屬性。) | (N/A) |
訊息合約屬性
屬性名稱 | 支援 | 描述 | WF 驗證 |
---|---|---|---|
HasProtectionLevel | Yes | 取得值,這個值表示訊息是否擁有保護層級。 | 無驗證 (Receive.Content 和 SendReply.Content 必須符合訊息合約類型)。 |
IsWrapped | Yes | 取得或設定值,這個值會指定訊息本文是否有包裝函式項目。 | 無驗證 (Receive.Content 和 SendReply.Content 必須符合訊息合約類型)。 |
ProtectionLevel | No | 取得或設定值,這個值已指定訊息是否須經過加密、簽署,或兩者都進行。 | (N/A) |
TypeId | Yes | 在衍生類別中實作時,取得這個屬性的唯一識別碼。 (繼承自屬性。) | 無驗證 (Receive.Content 和 SendReply.Content 必須符合訊息合約類型)。 |
WrapperName | Yes | 取得或設定訊息本文中包裝函式項目的名稱。 | 無驗證 (Receive.Content 和 SendReply.Content 必須符合訊息合約類型)。 |
WrapperNamespace | No | 取得或設定訊息本文包裝函式項目的命名空間。 | (N/A) |
資料合約屬性
屬性名稱 | 支援 | 描述 | WF 驗證 |
---|---|---|---|
IsReference | No | 取得或設定值,這個值表示是否要保留物件參考資料。 | (N/A) |
名稱 | Yes | 取得或設定型別的資料合約名稱。 | 無驗證 (Receive.Content 和 SendReply.Content 必須符合訊息合約類型)。 |
Namespace | Yes | 取得或設定型別之資料合約的命名空間。 | 無驗證 (Receive.Content 和 SendReply.Content 必須符合訊息合約類型)。 |
TypeId | No | 在衍生類別中實作時,取得這個屬性的唯一識別碼。 (繼承自屬性。) | (N/A) |
錯誤合約屬性
屬性名稱 | 支援 | 描述 | WF 驗證 |
---|---|---|---|
動作 | Yes | 取得或設定 SOAP 錯誤訊息的動作,此訊息指定為作業合約的一部分。 | SendReply.Action 應相符。 |
DetailType | Yes | 取得包含錯誤資訊的可序列化物件型別。 | SendReply.Content 應符合該類型 |
HasProtectionLevel | No | 取得指出 SOAP 錯誤訊息是否已指派保護層級的值。 | (N/A) |
名稱 | No | 取得或設定 Web 服務描述語言 (WSDL) 中的錯誤訊息名稱。 | (N/A) |
Namespace | No | 取得或設定 SOAP 錯誤的命名空間。 | (N/A) |
ProtectionLevel | No | 指定 SOAP 錯誤從繫結要求的保護層級。 | (N/A) |
TypeId | No | 在衍生類別中實作時,取得這個屬性的唯一識別碼。 (繼承自屬性。) | (N/A) |
其他支援和實作資訊
不支援的服務合約功能
在合約中不支援使用 TPL (工作平行程式庫) 工作。
在服務合約中不支援繼承。
所設定之傳訊活動的產生
已將兩個公用靜態方法加入至 Receive 和 SendReply 活動,以支援在使用合約優先工作流程服務時,產生預先設定的訊息活動。
這些方法所產生的活動應該會通過合約驗證,因此這些方法會在內部使用,以做為 Receive 和 SendReply 驗證邏輯的一部分。 OperationName、ServiceContractName、Action、SerializerOption、ProtectionLevel 和 KnownTypes 全都已預先設定,以符合匯入的合約。 在工作流程設計工具的活動內容屬性頁面中,[訊息] 或 [參數] 區段也已預先設定,以符合合約。
另外,也針對出現在 FaultsFaultDescriptionCollection 中的每個錯誤,各傳回一組已設定的 SendReply 活動,以處理 WCF 錯誤合約。
對於目前 WF 服務不支援的 OperationDescription 其他部分, (例如 WebGet/WebInvoke 行為或自訂作業行為),API 在產生和設定期間將會忽略這些值。 不會擲回任何例外狀況。