WCF初接触实作——使用配置文件(二

上一篇介绍了最简单的方式来实现宿主和客户端:直接引用契约和服务项目、采用硬编码的方式,这次通过配置文件来定义终结点。刚接触WCF时,直接编辑配置文件会让人一头雾水,所以还是使用直观的方式——使用WCF编辑工具,这个工具可以通过“开始”→“Microsoft Visual Studio 2010”→“Microsoft Windows SDK Tools”→“服务配置编辑器”打开,也可以通过VS2010的IDE中“工具”→“WCF服务配置编辑器”打开。

宿主:

  1、在之前的解决方案中添加一个Windows窗体应用程序WCFDemo.Host.WithConfig。

  2、添加引用System.ServiceModel。

  3、引用上一篇的契约和服务两个项目。

  4、为宿主项目添加应用程序配置文件,并编辑:

  运行配置工具,打开宿主项目的配置文件,右击树形目录的“服务”节点新建服务; 

  把Name属性设置为我们之前写的服务; 

  新建服务终结点,并设置A(Address)、B(Binding)、C(Contract)。设置的值和上一篇代码里的一样; 

  保存后可以查看配置文件。

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <services>
            <service name="WCFDemo.Services.DemoService">
                <endpoint address="http://localhost:5678/DemoService" binding="basicHttpBinding"
                    bindingConfiguration="" contract="WCFDemo.Contracts.IDemoService" />
            </service>
        </services>
    </system.serviceModel>
</configuration>
复制代码

  5、在窗体放置两个Button和一个Label,编写代码如下:

复制代码
using System;
using System.Windows.Forms;

using System.ServiceModel;
using WCFDemo.Services;

namespace WCFDemo.Host.WithConfig
{
    public partial class HostWithConfigForm : Form
    {
        public HostWithConfigForm()
        {
            InitializeComponent();
        }

        ServiceHost host;

        private void button1_Click(object sender, EventArgs e)
        {
            host = new ServiceHost(typeof(DemoService));            
            host.Opened += delegate { label1.Text = "服务启动"; };
            host.Open();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (host != null && host.State == CommunicationState.Opened)
            {
                host.Closed += delegate { label1.Text = "服务停止"; };
                host.Close();
            }
        }
    }
}
复制代码

可以发现,和之前唯一不同就是少了添加服务终结点的代码。运行带配置的宿主程序,再运行之前的客户端程序,可以正常通讯。接下来看一下使用配置文件的客户端。

 

客户端:

  1、在之前的解决方案中添加一个Windows窗体应用程序WCFDemo.Client.WithConfig。

  2、添加引用System.ServiceModel。

  3、引用之前契约项目。

  4、为客户端项目添加应用程序配置文件,并编辑:

  运行配置工具,打开客户端项目的配置文件,右击树形目录的“客户端”→“终结点”节点新建客户端终结点,并设置ABC和Name: 

保存后可以查看配置文件:

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <client>
            <endpoint address="http://localhost:5678/DemoService" binding="basicHttpBinding"
                bindingConfiguration="" contract="WCFDemo.Contracts.IDemoService"
                name="DemoService" />
        </client>
    </system.serviceModel>
</configuration>
复制代码

  5、在窗体放置一个Button和一个DataGridView,并编写代码如下:

复制代码
using System;
using System.Windows.Forms;

using System.ServiceModel;
using WCFDemo.Contracts;

namespace WCFDemo.Client.WithConfig
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (ChannelFactory<IDemoService> channelFactory = new ChannelFactory<IDemoService>("DemoService"))
            {                
                dataGridView1.DataSource = channelFactory.CreateChannel().GetMonitorData();
            }
        }
    }
}
复制代码

代码中ChannelFactory构造函数的参数和配置文件中的Name要一致。

 

现在,使用配置文件和不使用配置文件的宿主及客户端已完成,两个服务器和两个客户端之间都可通讯。看得出来,客户端使用服务都是对某个终结点的,客户端的ABC要和服务端一致。

目前为止,客户端都是通过直接引用契约类库来使用WCF服务的,很多时候客户端无法直接引用契约类库,这就需要服务端发布自己的契约,客户端根据契约生成代理类。

如何实现,下一篇再说——简短一点儿好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值