WCF 第十一章 工作流服务 从WF暴露一个服务(中)

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 文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="SimpleWFService.Workflow1Behavior">
                    <serviceMetadata httpGetEnabled="true" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service behaviorConfiguration="SimpleWFService.Workflow1Behavior"
                name="SimpleService.StockService">
                <endpoint address="" binding="wsHttpContextBinding" bindingConfiguration=""
                    contract="SimpleService.IStockService" />
                <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
                    contract="IMetadataExchange" />
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:8080/Workflow1" />
                    </baseAddresses>
                </host>
            </service>
        </services>
    </system.serviceModel>
</configuration>

寄宿一个服务开启的工作流

现在有很多选项来寄宿WCF服务。寄宿在第七章”寄宿”详细介绍过了,现在作一个简单的回顾,一个WCF宿主是任何实例化了ServiceHost 类的进程。服务最通用的寄宿环境是IIS。WCF 中对IIS有直接的支持,所以IIS寄宿和服务管理相对来说很容易。Vista 和 Windows Server 2008 将IIS中HTTP协议归总为Windows 激活服务(WAS), 所以通过WAS寄宿服务可以实现鲁棒性。Windows 服务中的服务寄宿(比如NT 服务)也非常通用,为管理员提供一个通用接口。为测试或者特殊的场景,WCF服务可以在一个命令行控制台或者Windows 应用程序中寄宿。

  不考虑寄宿环境,ServiceHost类在程序启动时向服务描述中添加终结点。在运行时,ServiceHost请求绑定中确定的信道监听器来监听进入消息。ServiceHost从配置文件中的<servicemodel>节点中读取服务描述信息,从代码属性中([ServiceContract], [ServiceBehavior], [OperationContract] 等等),从类定义中。ServiceHost也可以用来操作编程。寄宿程序也可以向服务中添加行为,这可以控制当消息被接收或者发送以及实例被创建或者释放时发生的行为。当消息被信道监听器接收到以后,它们被分发给适当的服务契约来处理。这个很多在行为中实现,在第五章中详细介绍。

  寄宿一个服务开启的工作流与寄宿任何其他服务类似。当寄宿服务开启的工作流时,WF提供一个新的类,WorkflowServiceHost, 继承自ServiceHost, 来记录WF的特殊需要。然而ServiceHost的构造函数接收任何以[ServiceContract]标记的类,WorkflowServiceHost构造函数要求有可以用来实例化一个工作流的信息(继承自Activity的类型或者XAML流/文件)。WorkflowServiceHost向服务中添加三个行为: WorkflowServiceBehavior, WorkflowOperationBehavior和WorkflowRuntimeBehavior.它也添加一个DurableInstanceProvider和MessageContextInspector. 组合一起使用,它们管理服务实例并分发消息给工作流和接收工作流的消息。额外的,WorkflowServiceHost要求绑定与一个包含ContextBindingElement的服务终结点一起使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值