初探WCF

对于WCF是做什么的,以及具体的概念我在这不多说,只说WCF服务的创建和使用:

创建一个WCF服务有很多种方法,我在这说两种:

1.      一般创建

(1)创建服务

根据WCF的设计来说,创建WCF服务就是为了对外提供服务,外部程序可以通过服务访问并获取到自己需要的数据,具体创建如下:

建立工程,web的Winform的都可以,直接添加新建项,并选择WCF服务即可,此时VS会自动创建出接口和实现类,并添加config配置,你不需要手动配置,在接口中声明方法(每一个方法都必须加[OperationContract]),并在实例类中实例接口接口。

例如:

Interface类:

[ServiceContract]

           publicinterfaceIService

           {

              [OperationContract]

              string GetTestStr();

           }

实现类:

public classService :IService

          {

               public string GetTestStr()

              {

                  return "this isGetTestStr";

              }

          }

此时一个WCF服务基本创建完毕,当然此时还不能用,因为没有启动,具体启动如下:

新建一个winForm(只是为了演示,当然其他也可以),添加一个按钮作为启动接口,具体事件如下:(需引入System.ServiceModel;命名空间)

ServiceHost host = new ServiceHost(typeof(Service));

host.Open();

//这里Service是实例接口的类。

此时服务就可以启动了

(2)引用服务

   服务端已经创建好了服务客户端如何使用呢,接下来就是客户端的使用,还是依然用Winform做测试:

  客户端使用则应该引用服务,有两种方法:添加服务引用(这种客户端配置文件会自动生成),一种是添加引用(这种配置文件得手动写)

    1)添加服务引用

    右击引用添加引用服务,此时服务必须是开启的,否则搜索不到,引用地址可以在服务端的config中查找host节点下的baseAddress节点地址值或者在客户端的配置文件中找endpoint的节点值,引用服务以后便可以使用,

 使用时:

using (ChannelFactory<IService1> channelFactory =new ChannelFactory<IService1>("GetTestStr"))

   {

       IService1 ibalance = channelFactory.CreateChannel();

       using (ibalance as IDisposable)

       {

            var vosResult= ibalance.GetTestStr ();

            label1.Text= vosResult.ToString();

        }

    }

***注意这里的IService1是你的接口名,参数GetTestStr是配置文件中的client节点下endpoint的name值。此时简单的服务便可完成。

 

   2)添加引用

   基本和添加服务引用一样只是,得手动添加一个配置文件并添加配置,配置内容即为自动生成时的一样。主要部分大致如下

<system.serviceModel>

   <client>

     <endpointaddress="http://localhost:8732/WCFContract/IService"

       binding="basicHttpBinding"bindingConfiguration="basicBinding_IServer"

       contract="WCFContract.IService"name="1" />

</client>

</system.serviceModel>

2. 自动创建(暂且这么叫)

上面的创建方法不难,使用方法也不难,但是有一个问题就是:我们每使用一个方法就得ChannelFactory<IService1> channelFactory=new ChannelFactory<IService1>("GetTestStr ")一次,且GetTestStr必须在配置文件中有此节点的配置,这样为开发带来很大的麻烦和繁琐(我个人认为)。于是我们可以使用另一种方法(利用ClientBase类):

  新建一个类让其继承ClientBase类和IService1接口,如下:

class TestHander : ClientBase<IService>,IService

    {

        /**

        * 此类使用 ClientBase系统自动生成了通道并与服务建立连接

        * 省去了客户端使用时手动 ChannelFactory<IService> channelFactory =new ChannelFactory<IService>("SetUser")

        * 以及配置终结点信息的操作

        * 使用wcf服务的时候通过new此类并调用此类中的方法即可自动创建通道连接并调用服务方法

        * */

        public string GetTestStr()

        {

            return Channel. GetTestStr ();

        }

}

此时在客户端使用的时候直接label1.Text = new TestHander().GetTestStr();就可以了。

废话不说了,直接上代码吧:

IService接口:

[ServiceContract]

    public interface IService

    {

        [OperationContract]

        string GetTestStr ();

    }

 

Service实现接口

public classService:IService

    {

        public string GetTestStr ()

        {

            return This is TestStr;

        }

}

 

服务端启动方法

ServiceHost host = newServiceHost(typeof(Service));

    host.Open();

 

TestHander方法

class TestHander : ClientBase<IService>,IService

    {

        /**

        * 此类使用 ClientBase系统自动生成了通道并与服务建立连接

        * 省去了客户端使用时手动 ChannelFactory<IService> channelFactory =new ChannelFactory<IService>("SetUser")

        * 以及配置终结点信息的操作

        * 使用wcf服务的时候通过new此类并调用此类中的方法即可自动创建通道连接并调用服务方法

        * */

        public string GetTestStr()

        {

            return Channel. GetTestStr ();

        }

    }

客户端调用:

private void button2_Click(object sender, EventArgse)

{

    label1.Text= new TestHander().GetTestStr();

}

3. 未知方法(此方法我不知道正确与否,只是好奇试过一次,觉得还行)

如果对以上两种方法觉得麻烦,这种方法就是最好的选择了,此种只能在Web中建立。

首先建立一个web应用程序,在此应用程序(非类库)中创建所有的WCF服务,最后运行此程序或者在IIS发布(目的是使其能通过URL搜索到服务),在其他项目中添加服务引用通过此应用程序的URL获取,便可以使用。(其实本质上还是通过路径找到服务,系统自动在你的项目中添加了其服务的类和方法)

源码下载地址:http://download.csdn.net/detail/dominates/6000943


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值