wcf基礎筆記


  嘻嘻哈,其實學習wcf純屬意外,因為當時是想看一下wpf,結果很不小心搜成了wcf(不知道當時心里怎么想的手給打錯了),因為已經了去了解了wcf並且google了一些資料,心想既來之則安之,便整理了一些基本的筆記,寫出來順便就當理整理一下我的思路了。也可以給wcf想入門的同志們一點點參考。

    wcf是做什么的,網上講解很多,我就不多說了,我只想把我的第一個wcf代碼程序展示出來,並且會附上詳細注釋。因為我的工作一直是做winform程序的,所以,該程序的服務器端和客戶端均使用控制台應用程序進行開發。

     wcf是具體的開發流程,msdn上解釋是分為六部:

1,定義 Windows Communication Foundation 服務協定,說白了也就是我們通常所說的接口(intferface),只是比平時的接口多了幾個屬性。如下:

    /// <summary>
    /// 這些屬性的命名空間為using System.ServiceModel
    /// 該程序集一般情況下在C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Communication Foundation文件中
    /// </summary>
    [ServiceContract]  //服務協定
    public interface IHelloWordWCF
    {
        [OperationContract]  //數據協定,改屬性表明,改服務會公開此方法,也就說客戶端可以調用到
        void Writer(string name);

        [OperationContract]
        string DoSome();

        void S();           //無協定,客戶端將無法調用
    }

怎么樣,定義一個協議簡單吧,那就進行第二步

2,實現 Windows Communication Foundation 服務協定,其實也就是定義一個繼承自剛才我們定義的協定(IHellowWordWCF)的類

    /// <summary>
    /// 實現改協定
    /// </summary>
    public class HelloWordWCF:IHelloWordWCF
    {

        #region IHelloWordWCF 成員

        public void Writer(string name)
        {
            Console.WriteLine(name);
            Console.ReadLine();
        }

        public string DoSome()
        {
            return "yangyang";
        }

        public void S()
        {

        }

        #endregion
    }

這不,就實現了協定,在接口方法中可以寫需要實現的功能,下一步就沒這么常見了。
3,承載和運行基本的 Windows Communication Foundation 服務,也就是說,你剛才實現了協定的服務,那么,還得去承載運行發布呢。以方便客戶端的調用。

        //定義一個基址。以方便客戶端尋址。該URI指定HTTP方案、地計算機、端口號 8080
        static Uri uri = new Uri("http://localhost:8080/yangyang");
        static void Main(string[] args)
        {
            //創建Service實例承載服務
            //HelloWordWCF:承載服務的基本協定。
            //uri:包含承載服務的基址
            using (ServiceHost host = new ServiceHost(typeof(HelloWordWCF), uri))
            {
                try
                {
                    //加載該服務的終結點,
                    host.AddServiceEndpoint(typeof(IHelloWordWCF), new WSHttpBinding(), "HelloWordWCF");

                    //控制服務元數據和相關信息的發布。  發布服務了
                    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                    smb.HttpGetEnabled = true;  //元數據以使用 HTTP/GET 請求進行檢索。
                    host.Description.Behaviors.Add(smb);
                    host.Open();
                    Console.Write("The Service address is {0}", uri);
                    Console.ReadLine();
                    host.Close();

                }
                catch (CommunicationException ex)  //表示服務或客戶端應用程序中的通信錯誤。
                {
                    throw;
                }

            }
        }

好了,至此,我們的超級超級簡單的服務器端的編碼算是完成了,編譯成功后,調試-啟動新實例。在瀏覽器中輸入剛才定義的基址http://localhost:8080/yangyang,效果如下,

然后呢,我們打開vs的命令提示,輸入“WcfTestClient”,然后回車,彈出如下窗體,輸入我們的服務基址,就可以測試我們的服務是否可以正常工作了。如下圖

如果測試通過,恭喜了,我們的服務器端已經建立起來了,現在,我們就需要實現我們的客戶端了。也就是我們的第四步;

4,創建 Windows Communication Foundation 客戶端

 建了項目,我們首先引用using System.ServiceModel

 我們需要命令行工具 ServiceModel 元數據實用工具 (Svcutil.exe)幫我們生成服務器代碼文件和配置文件,如下圖所示

如圖,首先執行紅下滑線的命令,后面是我們服務的基址,然后回車,就會在藍色下划線的目錄生成這兩個文件,我們需要在客戶端添加現有文件,將這兩個文件進行添加,generatedProxy.cs是服務文件的代碼,使我們可以訪問服務器的接口方法,app.config中,是生成服務器端的一些配置。接下來的第五步

5,配置基本 Windows Communication Foundation 客戶端,第五步吧,其實是做一些總結點的配置,因為我這個演示是比較簡單的,沒有做繁雜的操作,所以,我就原本原樣的使用svcutil.exe生成的配置,藍色圈出的地方是服務代碼中的終結點的名稱,我們需要記錄一下。

呵呵,這時候如果一切順利,馬上就要成功了,最后一步了

6,使用 Windows Communication Foundation 客戶端

代碼如下

        static void Main(string[] args)
        {
            //使用剛才記錄終結點的名稱,初始化一個服務協定的實體
            HelloWordWCFClient client = new HelloWordWCFClient("WSHttpBinding_IHelloWordWCF");
            Console.WriteLine(client.DoSome()); //呵呵,我承認我的設計有點扯淡,協定中DoSome()中返回了“yangyang”這個字符串。
            Console.ReadLine();
        }

ok,一個簡單的wcf程序就好了,現在,在文件夾中找出我們的服務端的程序,在bin-debug中編譯好的Service.exe。然后,調試我們的客戶端,結果如下圖

這個時候我們的客戶端已經成功調用了服務器端的方法。

我列出我的項目結構圖:

所有的代碼都在服務協定,接口都在programs里面寫着。客戶端藍色圈出部分是svcutil.exe生成的。兩個項目都需要添加syste.ServiceModel程序集。

哪里寫的不對,還請讀者體諒一下,wcf的新手拉。嘻嘻

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM