WCF技术剖析(卷1)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3.6 步骤六 通过IIS寄宿服务

上面演示了通过自我寄宿的方式寄宿服务,现在我们来演示如何将WCF服务寄宿到IIS中。寄宿IIS的服务寄宿比较简单,基本上包含两个步骤:为WCF服务创建.svc文件和创建IIS虚拟目录。

为WCF服务创建.svc文件

我们知道,每一个ASP.NET Web服务都具有一个.asmx文本文件,客户端通过访问.asmx文件实现对相应Web服务的调用。与之类似,每个WCF服务也具有一个对应的文本文件,其文件扩展名为.svc。基于IIS的服务寄宿要求相应的WCF服务具有相应的.svc文件,.svc文件部署于IIS站点中,对WCF服务的调用体现在对.svc文件的访问上。

.svc文件的内容很简单,仅仅包含一个ServiceHost指令(Directive),该指令具有一个必须的Service属性和一些可选的属性。所以最简单的.svc仅仅具有一个包含Service属性(该属性指明了相应的WCF服务的有效类型)的ServiceHost指令。CalculatorService对应的.svc如下所示,我们把该.svc放在Services项目的根目录下,并将文件命名为CalculatorService.svc。

        <%@ServiceHost Service="Artech.WcfServices.Services.CalculatorService"%>

为WCF服务创建虚拟目录

和一般寄宿于IIS下的Web应用一样,WCF服务须要在IIS下创建相应的虚拟目录。在本应用中,为了方便,我们直接把Services项目的根目录映射为IIS虚拟目录,并将该虚拟目录命名为WcfServices。

接下来须要为通过IIS寄宿的CalculatorService创建配置文件,我们只须在Services的根目录下创建一个Web.config,将WCF相应的配置添加到该配置文件中即可。Web.config所有配置内容如下所示,可以看出,这基本上和上面通过自我寄宿方式定义的配置一致。唯一不同的是在添加的终结点中无须指定地址,因为.svc所在的地址就是服务的地址。也就是说,CalculatorService的地址为http://127.0.0.1/wcfservices/calculatorservice.svc。你可以通过http://127.0.0.1/wcfservices/calculatorservice.svc?wsdl得到相应的元数据。

        <?xml version="1.0" encoding="utf-8" ?>
        <configuration>
            <system.serviceModel>
                <behaviors>
                    <serviceBehaviors>
                        <behavior name="metadataBehavior">
                            <serviceMetadata httpGetEnabled="true"/>
                        </behavior>
                    </serviceBehaviors>
                </behaviors>
                <services>
                    <service behaviorConfiguration="metadataBehavior" name=
                      "Artech.WcfServices.Services.CalculatorService">
                        <endpoint address="http://127.0.0.1:9999/calculatorservice"
                          binding="wsHttpBinding" contract="Artech.WcfServices.
                          Contracts.ICalculator" />
                    </service>
                </services>
        </system.serviceModel>
        </configuration>

由于在创建Services项目的时候,我们并不曾引用System.ServiceMode程序集,所以须要加上这样一个引用。此外,一个Web应用在运行的时候会默认从位于根目录下的Bin目录加载程序集,而默认的情况下,编译后的程序集会自动保存到Bin\Debug|Release目录下,所以须要通过VS修改Services项目属性,将编译输出目录设置成Bin。

客户端仅仅须要修改终结点的地址,从而转向对寄宿于IIS下的CalculatorService的访问,该地址即为.svc文件的网络地址:http://127.0.0.1/wcfservices/calculatorservice.svc

        <?xml version="1.0" encoding="utf-8" ?>
        <configuration>
            <system.serviceModel>
                <client>
                    <endpoint address="http://127.0.0.1/wcfservices/
                      calculatorservice.svc" binding="wsHttpBinding" contract=
                      "Artech.WcfServices.Contracts.ICalculator" name=
                      "calculatorservice" />
                </client>
            </system.serviceModel>
        </configuration>