您的位置:首页 > 其它

WCF配置文件全攻略

2010-12-24 14:33 281 查看
当今的软件系统开发,如果没有配置文件几乎是不可想象的事。没有配置文件,软件如何按照用户的要求对功能进行定制?没有配置文件,在对软件进行配置安装的时候如何根据具体的硬软件环境进行修改?最重要的是没有配置文件,该如何应对软件系统的可扩展要求?不知不觉地,配置文件的编写与管理竟然成了软件开发的重中之重。

WCF作为分布式开发的基础框架,在定义服务以及定义消费服务的客户端时,都使用了配置文件的方法。虽然WCF也提供硬编程的方式,通过在代码中直接设置相关对象的属性来完成服务端与客户端的配置,然而这种方式并不利于后期的更改。无疑,配置文件为WCF带来了软件开发的灵活性,它的使用也是WCF开发过程中最频繁的。

WCF的配置文件共分为两部分:服务端配置与客户端配置。两者由于功能的不同,在配置文件的使用上也略有不同。

1.WCF的服务端配置

服务端的配置文件主要包括endpoint、binding、behavior的配置。一个标准的服务端配置文件所包含的主要xml配置节如下所示:

以下是引用片段:

<system.ServiceModel>

<services>

<service>

<endpoint/>

</service>

</services>

<bindings>

<!—定义一个或多个系统提供的binding元素,例如<basicHttpBinding> -->

<!—也可以是自定义的binding元素,如<customBinding>. -->

<binding>

<!—例如<BasicHttpBinding>元素. -->

</binding>

</bindings>

<behaviors>

<!—一个或多个系统提供的behavior元素. -->

<behavior>

<!—例如<throttling>元素. -->

</behavior>

</behaviors>

</system.ServiceModel>
1.1 <services>配置节

在<services>配置节中可以定义多个服务,每一个服务都被放到<service>配置节中,WCF的宿主程序可以通过配置文件找到这些定义的服务并发布这些服务。

<service>配置节包含name和behaviorConfiguration属性。其中,name配置了实现Service Contract的类型名。类型名必须是完整地包含了命名空间和类型名。而behaviorConfiguration的配置值则与其后的<behaviors>配置节的内容有关。<endpoint>是<service>配置节的主体,其中,<endpoint>配置节包含了endpoint的三个组成部分:Address、Binding和Contract。由于具体的binding配置是在<bindings>配置节中完成,因而,在<endpoint>中配置了bindingConfiguration属性,指向具体的binding配置。如下所示:

以下是引用片段:

<services>

<service name="BruceZhang.MyService" behaviorConfiguration="MyBehavior">

<endpoint address=""

binding="netTcpBinding"

bindingConfiguration="DuplexBinding"

contract="BruceZhang.IHello" />

</service>

</services>
我们也可以定义多个endpoint,例如:

以下是引用片段:

<services>

<service

name="Microsoft.ServiceModel.Samples.CalculatorService"

behaviorConfiguration="CalculatorServiceBehavior">

<endpoint address=""

binding="wsHttpBinding"

contract="Microsoft.ServiceModel.Samples.ICalculator" />

<endpoint address="mex"

binding="mexHttpBinding"

contract=" Microsoft.ServiceModel.Samples.IMetadataExchange" />

</service>

</services>
如果address值为空,那么endpoint的地址就是默认的基地址(Base Address)。例如ICalculator服务的地址就是http://localhost/servicemodelsamples/service.svc,而IMetadataExchange服务的地址则为http://localhost/servicemodelsamples/service.svc/mex。这里所谓的基地址可以在<service>中通过配置<host>来定义:

以下是引用片段:

<service

name="Microsoft.ServiceModel.Samples.CalculatorService"

behaviorConfiguration="CalculatorServiceBehavior">

<host>

<baseAddresses>

<add baseAddress=

"http://localhost/ServiceModelSamples/service.svc"/>

</baseAddresses>

</host>

<endpoint … />

</service>
1.2 <behaviors>配置节

当我们在定义一个实现了Service Contract的类时, binding和address信息是客户端必须知道的,否则无法调用该服务。然而,如果需要指定服务在执行方面的相关特性时,就必须定义服务的behavior。在WCF中,定义behavior就可以设置服务的运行时属性,甚至于通过自定义behavior插入一些自定义类型。例如通过指定ServiceMetadataBehavior,可以使WCF服务对外公布Metadata。配置如下:

以下是引用片段:

<behaviors>

<serviceBehaviors>

<behavior name="metadataSupport">

<serviceMetadata httpGetEnabled="true" httpGetUrl=""/>

</behavior>

<serviceBehaviors>

<behaviors>
在WCF中,behavior被定义为Attribute,其中,System.ServiceModel.ServiceBehaviorAttribute和System.ServiceModel.OperationBehaviorAttribute是最常用的behavior。虽然,behavior作为Attribute可以通过编程的方式直接施加到服务上,但出于灵活性的考虑,将behavior定义到配置文件中才是最好的设计方式。

利用ServiceBehavior与OperationBehavior可以控制服务的如下属性:

1、 对象实例的生命周期;

2、 并发与异步处理;

3、 配置行为;

4、 事务行为;

5、 序列化行为;

6、 元数据转换;

7、 会话的生命周期;

8、 地址过滤以及消息头的处理;

9、 模拟(Impersonation);

例如,通过ServiceBehavior设置对象实例的生命周期:

以下是引用片段:

<behaviors>

<serviceBehaviors>

<behavior name="metadataSupport">

<instanceContextMode httpGetEnabled="true" httpGetUrl=""/>

</behavior>

<serviceBehaviors>

<behaviors>
使用配置文件配置服务

通过使用配置文件配置 Windows Communication Foundation (WCF) 服务,可提供在部署时而非设计时提供终结点和服务行为数据的灵活性。本主题概述了当前可用的主要技术。

可使用 .NET Framework 配置技术对 WCF 服务进行配置。通常情况下,向承载 WCF 服务的 Internet 信息服务 (IIS) 网站的 Web.config 文件添加 XML 元素。通过这些元素,可以逐台计算机更改详细信息,例如终结点地址(用于与服务进行通信的实际地址)。此外,WCF 包括几个系统提供的元素,可用于快速选择服务的最基本的功能。从 .NET Framework 版本 4 开始,WCF 附带一个新的默认配置模型,该模型简化了 WCF 配置要求。如果您没有为特定服务提供任何 WCF 配置,运行时将自动使用一些标准终结点和默认绑定/行为配置您的服务。实际上,编写配置是 WCF 应用程序编程的主要部分。

有关更多信息,请参见 为 Windows Communication Foundation 服务配置绑定. 有关最常用元素的列表,请参见系统提供的绑定。有关默认终结点、绑定和行为的更多信息,请参见简化配置和Simplified Configuration for WCF Services。

System.Configuration:Web.config 和 App.config

WCF 使用 .NET Framework 的 System.Configuration 配置系统。

在 Visual Studio 中配置服务时,使用 Web.config 文件或 App.config 文件指定设置。配置文件名称的选择由为服务选择的宿主环境确定。如果正在使用 IIS 来承载服务,则使用 Web.config 文件。如果正在使用任何其他宿主环境,则使用 App.config 文件。

在 Visual Studio 中,名为 App.config 的文件可用于创建最终的配置文件。实际用于配置的最终名称取决于程序集名称。例如,名为“Cohowinery.exe”的程序集具有的最终配置文件名称为“Cohowinery.exe.config”。但是,只需要修改 App.config 文件。在编译时,对该文件所做的更改会自动应用于最终应用程序配置文件。

在使用 App.config 文件的过程中,当应用程序启动并应用配置时,文件配置系统会将 App.config 文件与 Machine.config 文件的内容合并。此机制允许在 Machine.config 文件中定义计算机范围的设置。可以使用 App.config 文件重写 Machine.config 文件的设置;也可以锁定 Machine.config 文件中的设置以应用它们。对于 Web.config,配置系统会将应用程序目录之下的所有目录中的 Web.config 文件合并到要应用的配置中。有关配置和设置属性的更多信息,请参见 System.Configuration 命名空间中的主题。

配置文件的主要部分

配置文件中的主要部分包括以下元素。

复制

<system.ServiceModel>

<services>
<!—- Define the service endpoints. This section is optional in the new
default configuration model in .NET Framework 4. -->
<service>
<endpoint/>
</service>
</services>

<bindings>
<!-- Specify one or more of the system-provided binding elements,
for example, <basicHttpBinding> -->
<!-- Alternatively, <customBinding> elements. -->
<binding>
<!-- For example, a <BasicHttpBinding> element. -->
</binding>
</bindings>

<behaviors>
<!-- One or more of the system-provided or custom behavior elements. -->
<behavior>
<!-- For example, a <throttling> element. -->
</behavior>
</behaviors>

</system.ServiceModel>



注意:
绑定部分和行为部分是可选的,只在需要时才包括。

<services> 元素

services 元素包含应用程序承载的所有服务的规范。从 .NET Framework 4 中的简化配置模型开始,此部分是可选的。

<services> element reference

<service> 元素

每个服务都具有以下属性:

name. 指定提供服务协定的实现的类型。这是完全限定名称,其中包含命名空间、句点和类型名称。例如,
"MyNameSpace.myServiceType"


behaviorConfiguration. 指定一个在 behaviors 元素中找到的 behavior 元素的名称。指定的行为控制操作,例如服务是否允许模拟。如果它的值是空的,或者未提供任何 behaviorConfiguration,则向服务中添加默认服务行为集。

<service> element reference

<endpoint> 元素

每个终结点都需要以下属性表示的地址、绑定和协定:

address. 指定服务的统一资源标识符 (URI),它可以是一个绝对地址,或是一个相对于服务基址给定的地址。如果设置为空字符串,则指示在创建服务的 ServiceHost 时,终结点在指定的基址上可用。

binding. 通常,指定一个类似 WsHttpBinding 的系统提供的绑定,但也可以指定一个用户定义的绑定。指定的绑定确定传输协议类型、安全和使用的编码,以及是否支持或启用可靠会话、事务或流。

bindingConfiguration. 如果必须修改绑定的默认值,则可通过在 bindings 元素中配置相应的 binding 元素来执行此操作。此属性应赋予与用于更改默认值的 binding 元素的 name 属性相同的值。如果未提供任何名称,或者在绑定中未指定任何 bindingConfiguration,则在终结点中使用绑定类型的默认绑定。

contract. 指定定义协定的接口。这是在由 service 元素的 name 属性指定的公共语言运行库 (CLR) 类型中实现的接口。

<endpoint> element reference

<bindings> 元素

bindings 元素包含可由任何服务中定义的任何终结点使用的所有绑定的规范。

<bindings> element reference

<binding> 元素

bindings 元素中包含的 binding 元素可以是系统提供的绑定之一(请参见系统提供的绑定),也可以是自定义绑定(请参见自定义绑定)。binding 元素具有 name 特性,此属性将绑定与 endpoint 元素的 bindingConfiguration 特性中指定的终结点相关联。如果未指定任何名称,则该绑定对应于该绑定类型的默认值。

有关配置服务和客户端的更多信息,请参见Configuring Windows Communication Foundation Applications。

<binding> element reference

<behaviors> 元素

这是定义服务行为的 behavior 元素的容器元素。

<behaviors> element reference

<behavior> 元素

每个 behavior 元素均由 name 属性进行标识,并提供系统提供的行为(例如 <throttling>)或自定义行为。如果未提供任何名称,则该行为元素对应于默认服务或终结点行为。

<behavior> element reference

如何使用绑定和行为配置

在 WCF 中,通过在配置中使用引用系统,可以很方便地在终结点之间共享配置。与绑定相关的配置值在
<binding>
部分的 bindingConfiguration 元素中进行分组,而不是直接将配置值分配到终结点。绑定配置是一组命名的绑定设置。然后,终结点可以通过名称来引用 bindingConfiguration

复制

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="myBindingConfiguration1" closeTimeout="00:01:00" />
<binding name="myBindingConfiguration2" closeTimeout="00:02:00" />
<binding closeTimeout="00:03:00" />  <!—- Default binding for basicHttpBinding -->
</basicHttpBinding>
</bindings>
<services>
<service name="MyNamespace.myServiceType">
<endpoint
address="myAddress" binding="basicHttpBinding"
bindingConfiguration="myBindingConfiguration1"
contract="MyContract"  />
<endpoint
address="myAddress2" binding="basicHttpBinding"
bindingConfiguration="myBindingConfiguration2"
contract="MyContract" />
<endpoint
address="myAddress3" binding="basicHttpBinding"
contract="MyContract" />
</service>
</services>
</system.serviceModel>
</configuration>


<binding>
元素中设置 bindingConfigurationnamename 必须是绑定类型(在本例中为 <basicHttpBinding>)范围中的唯一字符串,或者是引用默认绑定的空值。通过将 bindingConfiguration 属性设置为此字符串,终结点链接到该配置。

以相同方式实现 behaviorConfiguration,如以下示例中所示。

复制

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="myBehavior">
<callbackDebug includeExceptionDetailInFaults="true" />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>

</behaviors>
<services>
<service name="NewServiceType">
<endpoint
address="myAddress3" behaviorConfiguration="myBehavior"
binding="basicHttpBinding"
contract=”MyContract” />
</service>
</services>
</system.serviceModel>
</configuration>


请注意,向服务中添加了默认服务行为集。此系统允许终结点共享公共配置而不用重新定义设置。如果需要计算机范围,则在 Machine.config 中创建绑定或行为配置。配置设置在所有 App.config 文件中可用。通过配置编辑器工具 (SvcConfigEditor.exe) 可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: