WCF创建学习二:使用XML配置终结点发布服务端

【前言】


这篇博客仍然是关于WCF的创建学习。上篇博客中使用的是在服务端的HOST中写入终结点的配置,这次采用配置


文件的方式进一步进行解耦。在配置文件中运用到了<system.serviceModel>的配置属性。它是专门为分布式服务的


一种配置方式。在它的<service>、<endpoint>、<behaviors>这三个属性中发布服务端的实现地址、发布地址、绑定


方式、服务端对外接口。


【实现思路】



在项目中新建项目,添加服务的类库[WCFServiceDemo],类库中添加对外的总的接口类[IHelloService]。



在项目中新建项目,添加web窗体[WinformHello]和类[HelloService](用于实现接口)。



在WinformHello 中添加XML的APP.Config,用于添加配置信息。



将web窗体运行,激活,开启服务后,就可以显示发布的服务信息了。



代码:


WCFServiceDemo:


IHelloService: 需要引用 System.ServiceModel


<pre name="code" class="html"><span style="font-family:SimSun;font-size:18px;">using System.ServiceModel;
namespace WCFServiceDemo
{
    //声明服务契约
    [ServiceContract]
    public interface IHelloService
    {
        //在服务中添加方法或者提供的服务
        [OperationContract]
        DateTime getDateTime();


        [OperationContract]
        String getUserInfo();

    }
}</span>



 
 
 

WinformHello :

app.config:

<span style="font-family:SimSun;font-size:18px;"><?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
  <services>
     <!--name属性表示实现服务的命名空间.类;-->
      <service name="WinformHello.HelloService" behaviorConfiguration="TestBeahavior" >
        <host>
          <baseAddresses>
            <!--手动添加发布地址,本地发布-->
            <add baseAddress = "http://localhost:8080/Hello"/>
          </baseAddresses>
        </host>
         <!--表名绑定方式,和服务端被实现的总接口(服务)-->
        <endpoint address="" binding="basicHttpBinding" contract="WCFServiceDemo.IHelloService"></endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="TestBeahavior">
          <!--配置信息可见-->
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration></span>



HelloService:需要引入需要被实现的接口的命名空间,并实现。



<span style="font-family:SimSun;font-size:18px;">using WCFServiceDemo;
namespace WinformHello
{
    public class HelloService : WCFServiceDemo.IHelloService
    {
        public DateTime getDateTime()
        {
            return DateTime.Now;
        }



        public string getUserInfo()
        {

            return "猴年过完是鸡年,鸡年过完是狗年!";

        }
    }
}</span>



宿主窗体:





对应代码:



<span style="font-family:SimSun;font-size:18px;">        ServiceHost host = null;

        private void button1_Click(object sender,EventArgs e)
        {
            host = new ServiceHost(typeof(WinformHello.HelloService));

            host.Open();

            label1.Text = "服务已经启动";
          
        }
</span>



实现效果:



运行窗体,启动服务:






查看发布的服务信息URL:



在App.confg中直接访问地址就行。





查看发布的服务信息:



<system.serviceModel>:

配置信息:

元素

说明

behaviors

此元素定义名为 endpointBehaviors 和 serviceBehaviors 的两个子集合。 每个集合分别定义终结点和服务所使用的行为元素。 每个行为元素由其唯一的 name 属性标识。

Bingdings

Client

此元素包含客户端用来连接到服务的终结点的列表。

ComContracts

此节定义支持 WCF 和 COM 互操作的 COM 协定。

commonBehaviors

此元素只能在 machine.config 文件中定义。 它定义了名为 endpointBehaviors 和 serviceBehaviors 的两个子集合。 每个集合分别定义计算机上所有 WCF 终结点和服务所使用的行为元素。 如果同时在 <commonBehaviors> 和 <behaviors> 节中定义了某个行为,则 <behaviors> 节中的行为优先。

diagnostics

此元素包含 WCF 的诊断功能设置。 用户可以启用/禁用跟踪、性能计数器和 WMI 提供程序,还可以添加自定义消息筛选器。

extensions

此节包含一个扩展集合,这些扩展使用户能够创建扩展的用户定义绑定、行为和其他方面。

protocolMapping

serviceHostingEnvironment

此元素定义服务宿主环境要为特定 传输实例化的类型。 如果此节为空,则使用默认类型。

comContracts

此元素定义支持 WCF 和 COM 互操作的 COM 协定。

StandardEndpoints

此节定义一个标准终结点集合,这些终结点是预配置的可重用终结点。标准终结点具有一个或多个设置为固定值的地址、绑定和协定特性。例如,发现终结点具有固定的协定。此外,还可以使用标准终结点用新属性扩展服务终结点,这与定义自定义绑定相似。


备注:


WCF 不会向其他产品的配置节中添加元素。



WCF 服务是在配置文件的 services 节中定义的。程序集可以包含任意多个服务。每个服务都有自己的 service


配置节。本节及其内容定义特定服务的服务协定、行为和终结点。



只有服务的 name 属性是必需的。默认情况下,服务的名称描述用于实现服务的基础 CLR 类型;但是,您可以


更改 ServiceContractAttribute 上的 ConfigurationName 属性以重写 CLR 类型要求。



behaviorConfiguration 属性是可选项。它标识服务所使用的服务行为。此特性指定的行为必须链接到同一配置


文件的范围(即,同一文件或父文件)中定义的服务行为。



每个服务将公开 endpoint 元素中定义的一个或多个终结点。每个终结点都具有自己的地址和绑定。配置文件中


使用的所有绑定都必须在该文件的范围内定义。



绑定通过 name 和 bindingConfiguration 属性的组合链接到终结点。 binding 属性定义在哪个节中定义绑


定。 bindingConfiguration 属性定义使用绑定节中的哪个已配置绑定。绑定节可以定义若干个已配置的绑定。



总结:



这个Demo的实现没有使用WCF的封装好的框架进行搭建,而是采用日常的VS项目进行,这样可以体会到如何创建


的分布式服务的精髓,VS自带的WCF框架其实也就是把这些封装了一下,从根上了解它的创建过程,有利于我们在使


用封装框架时游刃有余。



在配置文件中声明了要被实现的接口和实现接口的类。对<system.serviceModel>的学习和理解是关键点。

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念