zoukankan      html  css  js  c++  java
  • 一步步学习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

  • 相关阅读:
    Emoji表情编解码库XXL-EMOJI
    代码生成平台Xxl-Code-Generator
    分布式单点登录框架XXL-SSO
    分布式爬虫框架XXL-CRAWLER
    Java对象和Excel转换工具XXL-EXCEL
    API管理平台XXL-API
    分布式缓存管理平台XXL-CACHE
    不知不觉已经写了多年代码,贴一下12年写的代码,表喷哈
    memcached安装、使用
    MySQL和Redis数据一致性问题
  • 原文地址:https://www.cnblogs.com/peida/p/1270793.html
Copyright © 2011-2022 走看看