真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

WCF簡單教程(1)入門

WCF是DotNet體系中很重要的一項技術(shù),但是組內(nèi)很多組員通過書籍自學的時候感覺涉及面太廣、配置文件太復(fù)雜,新名詞太多、抓不到頭緒,有感于此,決定進行一次組內(nèi)技術(shù)培訓,順便把培訓講義整理到blog上來。不求大而全,而是要讓初學者快速入門,因此想入實例入手,并刻意隱藏一些初期用不到的內(nèi)容,以降低入門門檻。有任何錯誤歡迎指正。

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比荷塘網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式荷塘網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋荷塘地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。

注:本系列文章基于.Net Framework 3.5,以教程的最后會歸納一下到了4.0中有哪些差異。

----------------------- 分隔線 -----------------------

第一篇:入門,構(gòu)建第一個WCF程序

1、服務(wù)端

建立一個控制臺應(yīng)用程序作為Server,新建一個接口IData作為服務(wù)契約。這個契約接口一會兒也要放到Client端,這樣雙方才能遵循相同的標準。別忘了添加對System.ServiceModel的引用。

  1. using System;

  2. using System.ServiceModel;

  3. using System.Text;

  4. namespace Server

  5. {

  6.    ///

  7.    /// 用ServiceContract來標記此接口是WCF的服務(wù)契約,可以像WebService一樣指定一個Namespace,如果不指定,就是默認的http://tempuri.org

  8.    ///

  9.    [ServiceContract(Namespace="WCF.Demo")]

  10.    publicinterface IData

  11.    {

  12.        ///

  13.        /// 用OperationContract來標記此方法是操作契約

  14.        ///

  15.        [OperationContract]

  16.        string SayHello(string userName);

  17.    }

  18. }


針對這個接口建立實現(xiàn)類,這個類才是真正干活的,工作在服務(wù)端,不出現(xiàn)在客戶端:

  1. using System;

  2. using System.Text;

  3. namespace Server

  4. {

  5.    ///

  6.    /// 實現(xiàn)IData接口,此處不需要寫契約標記

  7.    ///

  8.    publicclass DataProvider : IData

  9.    {

  10.        publicstring SayHello(string userName)

  11.        {

  12.            returnstring.Format("Hello {0}.", userName);

  13.        }

  14.    }

  15. }


為工程添加一個App.config文件,這里面要定義與服務(wù)發(fā)布相關(guān)的參數(shù)。WCF中常見的做法是用代碼寫服務(wù)邏輯,但是用配置文件來定義服務(wù)發(fā)布方式,這樣做的好處是松散耦合。

  1.  

  2.  

  3.  

  4.    

  5.    

  6.      

  7.        

  8.          

  9.        

  10.      

  11.      

  12.      

  13.    

  14.  


萬事具備,只剩最后一步了,將服務(wù)發(fā)布出去:

  1. using System;

  2. using System.ServiceModel;

  3. namespace Server

  4. {

  5.    class Program

  6.    {

  7.        staticvoid Main(string[] args)

  8.        {

  9.            //定義一個ServiceHost,注意參數(shù)中要使用契約實現(xiàn)類而不是接口

  10.            using(ServiceHost host = new ServiceHost(typeof(Server.DataProvider)))

  11.            {

  12.                host.Open();

  13.                Console.WriteLine("Service Running ...");

  14.                Console.ReadKey();

  15.                host.Close();

  16.            }

  17.        }

  18.    }

  19. }

有人可能會問服務(wù)發(fā)布到哪去了?沒指定地址呀?這是一個初學者容易搞不明白的地方。

是的,此時App.config中的定義就發(fā)揮作用了,由于ServiceHost中指定對Server.DataProvider類服務(wù),而App.config中定義了name="Server.DataProvider"的service,其下有endpoint,定義了綁定方式是basicHttpBinding,而http方式的baseAddress只有一個,就是 http://localhost:8080/wcf。

編譯運行,屏幕顯示Service Running ... 就是正常跑起來了,此時如果用命令行 netstat -ano | findstr "8080" 看一下,應(yīng)該有如下輸出:

  1. TCP    0.0.0.0:8080         0.0.0.0:0          LISTENING      4

  2. TCP    [::]:8080            [::]:0             LISTENING      4

表示我們的程序已經(jīng)在TCP 8080端口開始監(jiān)聽了。值得注意的是PID是4,這是系統(tǒng)進程而不是我們自己的進程,這說明WCF程序?qū)ν馓峁〩TTP服務(wù)時,是借用了系統(tǒng)功能(http.sys)。

此時如果我們用瀏覽器訪問一下 http://localhost:8080/wcf,不報錯,但是會提示“當前已禁用此服務(wù)的元數(shù)據(jù)發(fā)布”,這是由于默認不允許以http get方式獲取服務(wù)的WSDL,我們不用管它,不影響后面的使用,以后的章節(jié)中我們再來看這個問題。


2、客戶端

再建立一個控制臺應(yīng)用程序作為Client,把Server中的接口IData拷過來,因為這是服務(wù)契約。

為工程添加一個App.config文件,這里面要定義客戶端訪問的相關(guān)參數(shù),這里我去掉了一些用不上的參數(shù),以保持配置文件簡單,防止各位看暈了頭。

  1.  

  2.    

  3.    

  4.      

  5.      

  6.    

  7.  


然后寫代碼,來調(diào)用Server端發(fā)布的SayHello方法:

  1. using System;

  2. using System.ServiceModel;

  3. using System.ServiceModel.Channels;

  4. namespace Client

  5. {

  6.    class Program

  7.    {

  8.        staticvoid Main(string[] args)

  9.        {

  10.            //客戶端訪問有多種方式,此處只顯示一種

  11.            //利用ChannelFactory的CreateChannel方法創(chuàng)建一個IData的代理對象,其中參數(shù)“DataService”就是剛才在App.config中定義的endpoint的名稱

  12.            var proxy = new ChannelFactory("DataService").CreateChannel();

  13. //調(diào)用SayHello方法

  14.            Console.WriteLine(proxy.SayHello("WCF"));

  15. //用完后一定要關(guān)閉,因為服務(wù)端有最大連接數(shù),不關(guān)閉會在一定時間內(nèi)一直占著有效連接

  16.            ((IChannel)proxy).Close();

  17.        }

  18.    }

  19. }

編譯運行,屏幕應(yīng)能正常打印出“Hello WCF.”。第一個入門demo就搞定了,應(yīng)該還是比較簡單的。只是App.config的配置有些復(fù)雜,后面我們會看到,其實也可以不要配置,直接用代碼搞定,不過從松散耦合的角度講不建議這么做。


分享文章:WCF簡單教程(1)入門
網(wǎng)站地址:http://weahome.cn/article/pojsge.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部