一步步学习WCF(1):Hello

长平狐 发布于 2013/06/17 12:54
阅读 74
收藏 0

     1.什么是WCF

      Windows通信基础(Windows Communication Foundation,简称WCF)是基于Windows平台下开发和部署服务的软件开发包(Software Development Kit,SDK)。WCF为服务提供了运行时环境(Runtime Environment),使得开发者能够将CLR类型公开为服务,又能够以CLR类型的方式使得创建服务的任务事半功倍。WCF是微软对一系列产业标准定义的实现,包括服务交互、类型转换、封送(Marshaling)以及各种协议的管理。正因为如此WCF才能够提供服务之间的互操作性。WCF为服务开发提供了许多有用的功能,包括托管(Hosting)、服务实例管理(Service Instance Management)、异步调用、可靠性、事务管理、离线队列调用(Disconnected Queued Call)以及安全性。同时,WCF还提供了设计优雅的可扩展模型,使开发人员能够丰富它的基础功能。事实上,WCF自身的实现正是利用了这样的一种可扩展型。本书的其余章节会专注于介绍诸多方面的内容与特征。WCF的大部分功能都包含在一个单独的程序集 System.ServiceModel.dll 中,命名空间为 System.ServiceModel
     WCF是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的、安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布 式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相 关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。

     2.WCF之Hello

     我们了解了什么是WCF之后,先来看一个简单的实例:Hello(开发环境VS2008SP1)

     开发步骤:

     第一步:打开VS2008,新建项目,选择Visual c#,.NET Framework选择3.5 选择已安装的模板WCF 服务应用程序模板,并将项目改名为Hello,如下图:

     2.创建好了项目,会自动给我们生成IService1.cs和Service1.svc等文件,我们要将这些删除掉,同时在生成的WebConfig中的system.serviceModel的配置节的services下面把以下服务配置删除掉:
             < service  name ="hello.Service1"  behaviorConfiguration ="hello.Service1Behavior" >
                
<!--  Service Endpoints  -->
                
< endpoint  address =""  binding ="wsHttpBinding"  contract ="hello.IService1" >
                    
<!--  
              部署时,应删除或替换下列标识元素,以反映
              在其下运行部署服务的标识。删除之后,WCF 将
              自动推导相应标识。
          
-->
                    
< identity >
                        
< dns  value ="localhost" />
                    
</ identity >
                
</ endpoint >
                
< endpoint  address ="mex"  binding ="mexHttpBinding"  contract ="IMetadataExchange" />
            
</ service >
     同时删除掉serviceBehaviors节中的:
< behavior  name ="hello.Service1Behavior" >
     
< serviceMetadata  httpGetEnabled ="true"   />
     
< serviceDebug  includeExceptionDetailInFaults ="false"   />
    
</ behavior >
      3.接下来我们手动添加我们要的服务hello,点击项目,添加新建项,选择WCF服务模板,修改名称为Hello.svc,确定后在项目中生成IHello.cs和Hello.svc,同时在Web.config中的system.serviceModel会变成如下:
     < system.serviceModel >
        
< services >
            
< service  behaviorConfiguration ="Hello.HelloBehavior"  name ="Hello.Hello" >
                
< endpoint  address =""  binding ="wsHttpBinding"  contract ="Hello.IHello" >
                    
< identity >
                        
< dns  value ="localhost" />
                    
</ identity >
                
</ endpoint >
                
< endpoint  address ="mex"  binding ="mexHttpBinding"  contract ="IMetadataExchange" />
            
</ service >
        
</ services >
        
< behaviors >
            
< serviceBehaviors >
                
< behavior  name ="Hello.HelloBehavior" >
                    
< serviceMetadata  httpGetEnabled ="true" />
                    
< serviceDebug  includeExceptionDetailInFaults ="false" />
                
</ behavior >
            
</ serviceBehaviors >
        
</ behaviors >
    
</ system.serviceModel >

     4.我们将IHello.cs修改为:

    [ServiceContract]
    
public   interface  IHello
    {
        [OperationContract]
        
string  SayHello( string  Name);
    }

     5.我们在Hello.svc中实现IHello中的SayHello:

         public   string  SayHello( string  Name)
        {
            
return   " Hello, "   +  Name;
        } 
     6.创建客户端:通过以上步骤,我们的WCF的Hello的服务已经创建好了。现在我们开始创建一个调用WCF的客户端,在我们所在的解决方案中添加一个名为Client的ASP.Net的web应用程序,在Default.aspx中添加如下代码:
< asp:TextBox  ID ="TextBox1"  runat ="server" ></ asp:TextBox >
        
< asp:Button  ID ="Button1"  runat ="server"  onclick ="Button1_Click"  Text ="Button"   />

     7.添加Hello服务引用:将Hello服务设为启动项,将Hello.svc设为起始页,运行得到服务地址http://localhost:3095/Hello.svc,我们在Client的项目中添加服务引用,将http://localhost:3095/Hello.svc填入地址栏中,点击前往,就会自动获取服务。获取到服务后,修改一下命名空间,如下图所示:

      8.在Default的按钮事件中添加如下代码:
         protected   void  Button1_Click( object  sender, EventArgs e)
        {
            ServiceReferenceHello.HelloClient proxy 
=   new  Client.ServiceReferenceHello.HelloClient();

            Page.ClientScript.RegisterStartupScript(
            
this .GetType(),
            
" js " ,
            
string .Format( " alert('{0}') " , proxy.SayHello(TextBox1.Text.ToString())),
            
true );
            proxy.Close();
        }
     9.查看效果,把Client项目设为启动项目,把Default.aspx设为起始页,运行项目,在文本框中输入文字,点击按钮看看运行效果:

     哈哈,简单吧,这样我们就创建了一个完整的简单的WCF项目。今天早上就学习到这儿,时间不早了,洗漱上班去了,哈哈,晚上回来继续学习。。。。。。。

     Hello源代码: http://files.cnblogs.com/peida/hello.rar


原文链接:http://www.cnblogs.com/peida/archive/2008/08/19/1270793.html
加载中
返回顶部
顶部