WCF快速入门——纯手工方式编写WCF入门程序

为什么称为手动编写方式,是因为服务使用手工方式编写,并且客户端调用时不采用引用服务的方式,而是采用编写代码的方式调用。

  用例子来说明。例子的功能是通过WCF得到字符串“Hello! 纯手工WCF服务调用成功!”。例子代码用Vs2010编写。


建立步骤

  与前一篇文章“WCF快速入门——半自动方式编写WCF入门程序”相似,我们要建立三个项目:
    1)服务
    2)运行服务的平台,即服务宿主
    3)客户端

   注:以下程序用VS2010编写。 

 

一、建立方法
  1.1、新建一个空方案WcfManual。
  1.2、在空方案WcfManual中建立三个项目,如下表。

项目名称

类型

用途

WcfManualService

Class Library

用于建立WCF服务。

WcfManualHost

Console Application

运行WCF 服务的平台。即WCF 服务的宿主。

UserClient

Console Application

客户端。用于调用WCF。

  1.2、在WcfManualService中增加一个接口IManulService,并修改原有类名称为ManulService,最终此方案如下图。   

 

 

二、编写服务,即编写WcfManualService项目
   此处服务与前边文章介绍的服务有点区别,前边是模板创建,这里我们用类库代替。前一篇文章中服务有契约和服务类型,这里我们用IManulService作为契约;用ManulService作为服务类型。


   2.1、添加引用
     在WcfManualService项目中填加System.ServiceModel的引用。
  2.1、编写契约
     WCF契约其实是个接口。修改WcfManualService项目中的IManulService,变成下边代码。

复制代码
using  System.ServiceModel;

namespace  WcfManualService
{
    
// 契约
    [ServiceContract]
    
public   interface  IManulService
    {
        
// 操作
        [OperationContract]
        
string  GetData();
    }
}
复制代码

 

 

  2.2、编写服务类型
    服务类型是契约实现。修改WcfManualService项目中的ManulService,变成下边代码。

 

复制代码
namespace  WcfManualService{

    
public   class  ManulService : IManulService
    {
        
#region  IManulService Members
        
public   string  GetData()
        {
            
return   " Hello! 纯手工WCF服务调用成功! " ;
        }
        
#endregion
    }
}
复制代码

 

  这样基本服务已建好。

 

三、编写运行服务,即编写宿主
   上一篇文章中我们使用配置文件的形式编写WCF服务宿主,在这里我们将全部使用代码的方式来启动服务。


   建立WCF宿主方法:
   3.1、添加引用。
      在“WcfManualHost”项目中需要添加两个引用,一是WCF必须引用的类System.ServiceModel。二是WCF的服务WcfManualService。如下图。

 

 

   3.2、编写宿主代码
     打开“WcfManualHost”项目中的Program.cs,并编写下边代码。在代码中我们会发现终结点、地址、行为都会被定义。代码完成后,启动和关闭服务的代码就编写好了。

复制代码
using  System.ServiceModel;
using  System.ServiceModel.Description;

namespace  WcfManualHost
{
    
class  Program
    {
        
static   void  Main( string [] args)
        {
            
// 定义服务
             using  (ServiceHost host  =   new  ServiceHost( typeof (WcfManualService.ManulService)))
            {
                
// 定义绑定
                System.ServiceModel.Channels.Binding httpBinding  =   new  BasicHttpBinding();
                
// 定义终结点
                host.AddServiceEndpoint( typeof (WcfManualService.IManulService), httpBinding,  " http://localhost:8002/ " );
                
if  (host.Description.Behaviors.Find < System.ServiceModel.Description.ServiceMetadataBehavior > ()  ==   null )
                {
                    
// 定义行为
                    ServiceMetadataBehavior behavior  =   new  ServiceMetadataBehavior();
                    behavior.HttpGetEnabled 
=   true ;
                    //获取元数据地址
                    behavior.HttpGetUrl 
=   new  Uri( " http://localhost:8002/ManualService " );
                    host.Description.Behaviors.Add(behavior);
                    //宿主启动完成后事件
                    host.Opened 
+=   delegate
                    {
                        Console.WriteLine(
" WCF手工服务已运行,按任意建退出! " );
                    };
                    
// 运行
                    host.Open();
                    Console.ReadKey();
                    
// 关闭
                    host.Close();
                }
            }
        }
    }
}
复制代码

 

 

   3.3、测试宿主程序
    将“WcfManualHost”项目设为启动项目。运行程序。结果如下图

 

    我们在浏览器中输入“http://localhost:8002/ManualService”测试服务是否正常。正常结果如下图。

 

 

 

四、编写客户端

  4.1、添加服务引用
    在UserClient项目中添加System.ServiceModel的引用。  


   4.2、添加文件
   与WcfManualService项目一样,增加与WcfManualService项目中相同的文件,分别为接口IManulService和类ManulService。这两个文件主要用作客户端代理。最终客户端项目如下图。

 

  4.3、编写IManulService代码

    IManulService代码与WcfManualService中IManulService代码基本相同。代码如下。

复制代码
using  System.ServiceModel;

namespace  UserClient
{
    [ServiceContract]
    
public   interface  IManulService
    {
        [OperationContract]
        
string  GetData();
    }
}
复制代码

 

 

 

  4.4、编写ManulService代码

    ManulService代码与WcfManualService中ManulService代码不同,此处必须继承自System.ServiceModel.ClientBase<IManulService>,并且用partial定义。代码如下。

复制代码
using  System.ServiceModel;

namespace  UserClient
{
    
public   partial   class  ManulService : System.ServiceModel.ClientBase < IManulService > , IManulService
    {
        
public   string  GetData()
        {
            
return   base .Channel.GetData();
        }
    }
}
复制代码

 

 

  4.5、最后编写客户端Program代码

复制代码
using  System.ServiceModel;
using  System.ServiceModel.Channels;
using  System.ServiceModel.Description;
namespace  UserClient
{
    
class  Program
    {
         
/*
           编写服务客户端方式
          
*/
        
static   void  Main( string [] args)
        {
            
// 此处地址为服务器EndPoint地址,而不是元数据地址。
             string  address  =   " http://localhost:8002/ " ;
            ChannelFactory
< IManulService >  channel =
                
new  ChannelFactory < IManulService > (
                    
new  BasicHttpBinding(),
                    
new  EndpointAddress(
                        
new  Uri(address)));
            IManulService proxy 
=  channel.CreateChannel();
            Console.WriteLine(
" WCF调用结果为:{0} " , proxy.GetData());            
            Console.ReadKey();
        }
    }
}
复制代码

 

 

  4.6、运行程序
   先启动“WcfManualHost”,后运行“UserClient”,出现结果如下图。


   注:

 

    1) 启动“WcfManualHost”可以在WcfManualHost项目的Debug文件夹中启动。也可以设置方案的启动顺序,启动这两个项目。 
    2) 客户端写代码的方式还有其它的方法,这里只介绍一种供大家学习。

 

  源码下载:WcfManual.rar

 

  WCF快速入门已全部介绍完。主要通过三个列子来了解WCF。这几篇文章涉及的一些WCF专用词语,当你回头再看这些词语时会更容易理解。对于一些词语意思网上有许多说明的文章,这里就不作说明。WCF还有其它许多方面的内容,有兴趣的朋友可以找其它方面的资料进行学习。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值