一步步学习WCF(1):Hello

     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源代码: https://files.cnblogs.com/peida/hello.rar

posted @ 2008-08-19 08:23  peida  阅读(1806)  评论(8编辑  收藏  举报