协定优先的工作流服务开发

从 .NET Framework 4.5 开始,Windows Workflow Foundation (WF) 以协定优先工作流开发的形式实现了 Web 服务与工作流之间的更佳集成。 通过协定优先的工作流开发工具,可以在代码中优先设计协定。 然后该工具在工具箱中为协定中的操作自动生成活动模板。 本主题概述工作流服务中的活动和属性如何映射到服务协定的特性。 请参阅如何:创建使用现有服务协定的工作流服务,了解创建协定优先工作流服务的分步示例。

本主题内容

将服务协定特性映射到工作流特性

下面几节中的表指定不同 WCF 特性和属性,以及它们如何映射到协定优先工作流中的消息活动和属性。

服务协定特性

属性名称 支持 说明 WF 验证
CallbackContract 获取或设置当协定为双工协定时的回调协定类型。 (N/A)
ConfigurationName 获取或设置用于查找应用程序配置文件中的服务的名称。 (N/A)
HasProtectionLevel 获取一个值,该值指示是否对成员分配保护级别。 Receive.ProtectionLevel 不应为 null。
名称 获取或设置 Web 服务描述语言 (WSDL) 中的 <portType> 元素的名称。 Receive.ServiceContractName.LocalName 应当匹配。
命名空间 获取或设置 Web 服务描述语言 (WSDL) 中的 <portType> 元素的命名空间。 Receive.ServiceContractName.NameSpace 应当匹配
ProtectionLevel 指定协定的绑定是否必须支持 ProtectionLevel 属性的值。 Receive.ProtectionLevel 应当匹配。
SessionMode 获取或设置是否允许、不允许或要求会话。 (N/A)
TypeId 在派生类中实现时,获取此特性的唯一标识符。 (从特性继承。) (N/A)

在此处插入小节正文。

操作协定特性

属性名称 支持 说明 WF 验证
操作 获取或设置请求消息的 WS-Addressing 操作。 Receive.Action 应当匹配。
AsyncPattern 指示操作是使用服务协定中的 Begin<methodName> 和 End<methodName> 方法对异步实现的。 (N/A)
HasProtectionLevel 获取一个值,该值指示是否必须对此操作的消息进行加密和/或签名。 Receive.ProtectionLevel 不应为 null。
IsInitiating 获取或设置一个值,该值指示方法是否实现可在服务器上启动会话(如果存在会话)的操作。 (N/A)
IsOneWay 获取或设置一个值,该值指示操作是否返回答复消息。 (此 Receive 无对应 SendReply 或此 Send 无对应 ReceiveReply)。
IsTerminating 获取或设置一个值,该值指示服务操作在发送答复消息(如果存在)后,是否会导致服务器关闭会话。 (N/A)
名称 获取或设置操作的名称。 Receive.OperationName 应当匹配。
ProtectionLevel 获取或设置一个值,该值指定是否必须对操作的消息进行加密和/或签名。 Receive.ProtectionLevel 应当匹配。
ReplyAction 获取或设置用于该操作答复消息的 SOAP 操作的值。 SendReply.Action 应当匹配。
TypeId 在派生类中实现时,获取此特性的唯一标识符。 (从特性继承。) (N/A)

消息协定特性

属性名称 支持 说明 WF 验证
HasProtectionLevel 获取一个值,该值指示消息是否有保护级别。 无验证(Receive.Content 和 SendReply.Content 必须匹配消息协定类型)。
IsWrapped 获取或设置一个值,该值指定消息正文是否有包装元素。 无验证(Receive.Content 和 Sendreply.Content 必须匹配消息协定类型)。
ProtectionLevel 获取或设置一个值,该值指定是否对消息进行加密、签名或同时执行这两种操作。 (N/A)
TypeId 在派生类中实现时,获取此特性的唯一标识符。 (从特性继承。) 无验证(Receive.Content 和 SendReply.Content 必须匹配消息协定类型)。
WrapperName 获取或设置消息正文的包装元素名称。 无验证(Receive.Content 和 SendReply.Content 必须匹配消息协定类型)。
WrapperNamespace 获取或设置消息正文包装元素的命名空间。 (N/A)

数据协定特性

属性名称 支持 说明 WF 验证
IsReference 获取或设置一个值,该值指示是否保留对象引用数据。 (N/A)
名称 获取或设置类型的数据协定的名称。 无验证(Receive.Content 和 SendReply.Content 必须匹配消息协定类型)。
命名空间 获取或设置类型的数据协定的命名空间。 无验证(Receive.Content 和 SendReply.Content 必须匹配消息协定类型)。
TypeId 在派生类中实现时,获取此特性的唯一标识符。 (从特性继承。) (N/A)

错误协定特性

属性名称 支持 说明 WF 验证
操作 获取或设置已指定作为操作协定一部分的 SOAP 错误消息的操作。 SendReply.Action 应当匹配。
DetailType 获取包含错误信息的可序列化对象的类型。 SendReply.Content 应匹配该类型
HasProtectionLevel 获取一个值,该值指示 SOAP 错误消息是否分配有保护级别。 (N/A)
名称 获取或设置 Web 服务描述语言 (WSDL) 中的错误消息的名称。 (N/A)
命名空间 获取或设置 SOAP 错误的命名空间。 (N/A)
ProtectionLevel 指定 SOAP 错误要求的绑定的保护级别。 (N/A)
TypeId 在派生类中实现时,获取此特性的唯一标识符。 (从特性继承。) (N/A)

其他支持和实现信息

不支持的服务协定功能

  • 不支持在协定中用 TPL(任务并行库)任务。

  • 不支持服务协定的继承。

配置消息活动的生成

ReceiveSendReply 活动加入两个公共静态方法,以支持在使用协定优先工作流服务时生成预配置消息活动。

由这些方法生成的活动应当通过协定验证,因此这些方法在内部用作 ReceiveSendReply 的验证逻辑。 OperationNameServiceContractNameActionSerializerOptionProtectionLevelKnownTypes 都进行了预配置,以匹配导入的协定。 在工作流设计器中的活动的内容属性页面,“消息”和“参数”部分也是预配置的,以便与协定匹配。

WCF 错误协定的处理也是通过为 FaultsFaultDescriptionCollection 中显示的每个错误返回一组独立的已配置 SendReply 活动。

对于 WF 服务目前不支持的其他 OperationDescription 部分(例如 WebGet/WebInvoke 行为,或自定义操作行为),该 API 将在生成和配置过程中忽略这些值。 不会引发任何异常。