代码改变世界

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

2011-03-14 21:26  DanielWise  阅读(912)  评论(2编辑  收藏  举报

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

列表11.5 显示了一个暴露一个服务开启工作流的最小自我寄宿控制台应用程序。与第一章"基础"的列表1.2比较,你将发现它们事实上是一致的。唯一的不同是使用WorkflowServiceHost类替代ServiceHost类。

列表11.5 自我寄宿一个服务开启工作流服务

            WorkflowServiceHost host = new WorkflowServiceHost(typeof(StockService));
            host.Open();
            Console.WriteLine("Service is ready, press <Enter> to terminate");
            Console.ReadLine();
            host.Close();

  列表11.6 显示了与自我寄宿工作流关联的配置文件。与第一章的列表1.5比较你将发现它们事实上是一致的。这里唯一的不同是需要行为中包含的认证信息来开启服务开启工作流的安全特性。安全信息将在这部分的稍后介绍。

  一个需要注意的地方是: 由Visual Studio 创建的app.config 文件在顺序工作流库工程中。这个文件应该从工作流库工程中挪到列表11.5显示的控制台应用程序中,因为WorkflowServiceHost将在它自己的文件夹中寻找配置信息。

列表11.6 一个开启工作流的服务的配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="SimpleWFService.Workflow1Behavior">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceCredentials />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service behaviorConfiguration="SimpleWFService.Workflow1Behavior"
                name="SimpleService.StockService">
                <endpoint address="" binding="basicHttpContextBinding" 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>

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

在IIS中寄宿一个工作流开启的服务与寄宿其他任何服务类似。需要在IIS中寄宿一个服务的步骤在第一章描述了。需要一个IIS应用,一个描述任何实例化服务的SVC文件,一个包含<servicemodel>配置信息的web.config 文件,虚拟根目录/bin文件夹下应用的实现。

  列表11.7 显示了一个与服务开启工作流关联的最小SVC文件。与第一章列表1.9比较会发现很类似。唯一的不同是包含了工厂元素,告诉IIS使用当创建ServiceHost时使用WorkflowServiceHostFactory而不是默认的ServiceHostFactory.

列表11.7 在IIS中寄宿一个工作流开启服务的SVC文件

<%@ ServiceHost service="SimpleWFService.StockService" 
Factory="System.ServiceModel.Activation.WorkflowServiceHostFactory" %>

  web.config 文件更新列表11.6的文件来包含<servicemodel>信息,去除了<host>节点,因为IIS的基地址由应用的虚拟目录决定。