app.config 中的配置
对大多数WCF服务来说,终结点和安全以及行为设置的信息存储在app.config 或者web.config 文件中
当Visual Studio 使用顺序工作流服务模板创建工程时,它会包含一个app.config 文件。但是因为模板包含在IWorkflow1接口 和 Workflow1类中同时这部分的例子使用IStockService 和 StockService, 这些名字需要在app.config 中调整。app.config 文件中更新过的WCF设置在列表11.4中显示。很多设置值得关注。
首先是服务名。这必须满足实现服务的类的名字。因为类的完全定义名称在StockService.XMOL.cs 文件中被从SimpleWFService.Workflow1 改为SimpleWFService.StockService, app.config 文件中的服务名必须匹配。同样的情况也适用终结点的契约名字,必须与IStockService.cs 文件中的完全定义接口名称匹配。
最后,注意终结点使用的绑定。默认是wsHttpContextBinding. 绑定包含ContextBindingElement 并支持会话,这对长时间运行的工作流是必要的。提供三个绑定以协助WF实现ContextBindingElement: wsHttpContextBinding, basicHttpContextBinding 和 netTcpContextBinding. 额外的,ContextBindingElement 可以添加到其他自定义绑定中,所以它们也可以用来与基于服务的工作流通信。注意ContextBindingElement 不支持单向操作,所以它不可以与MSMQ绑定一起使用。第四章有如何创建自定义绑定的详细信息。
列表11.4 服务开启工作流的app.config 文件
寄宿一个服务开启的工作流
现在有很多选项来寄宿WCF服务。寄宿在第七章”寄宿”详细介绍过了,现在作一个简单的回顾,一个WCF宿主是任何实例化了ServiceHost 类的进程。服务最通用的寄宿环境是IIS。WCF 中对IIS有直接的支持,所以IIS寄宿和服务管理相对来说很容易。Vista 和 Windows Server 2008 将IIS中HTTP协议归总为Windows 激活服务(WAS), 所以通过WAS寄宿服务可以实现鲁棒性。Windows 服务中的服务寄宿(比如NT 服务)也非常通用,为管理员提供一个通用接口。为测试或者特殊的场景,WCF服务可以在一个命令行控制台或者Windows 应用程序中寄宿。
不考虑寄宿环境,ServiceHost类在程序启动时向服务描述中添加终结点。在运行时,ServiceHost请求绑定中确定的信道监听器来监听进入消息。ServiceHost从配置文件中的
寄宿一个服务开启的工作流与寄宿任何其他服务类似。当寄宿服务开启的工作流时,WF提供一个新的类,WorkflowServiceHost, 继承自ServiceHost, 来记录WF的特殊需要。然而ServiceHost的构造函数接收任何以[ServiceContract]标记的类,WorkflowServiceHost构造函数要求有可以用来实例化一个工作流的信息(继承自Activity的类型或者XAML流/文件)。WorkflowServiceHost向服务中添加三个行为: WorkflowServiceBehavior, WorkflowOperationBehavior和WorkflowRuntimeBehavior.它也添加一个DurableInstanceProvider和MessageContextInspector. 组合一起使用,它们管理服务实例并分发消息给工作流和接收工作流的消息。额外的,WorkflowServiceHost要求绑定与一个包含ContextBindingElement的服务终结点一起使用。