一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

WCF分布式開發(fā)步步為贏(5)服務契約與操作重載

   【1】重載概念:

   【1.1】什么是重載(OverLoad):

    所謂重載是指同一個方法名可以對應著多個方法的實現(xiàn)。這些方法的名字相同,但是方法的參數(shù)的類型不同。這就是方法重載的概念。函數(shù)方法類和對象的應用尤其重要。

  方法重載要求編譯器能夠唯一地確定調(diào)用一個方法時應執(zhí)行哪個方法代碼,即采用哪個方法實現(xiàn)。確定方法實現(xiàn)時,要求從方法參數(shù)的個數(shù)和類型上來區(qū)分。這就是說,進行方法重載時,要求同名方法在參數(shù)個數(shù)上不同,或者參數(shù)類型上不同。否則,將無法實現(xiàn)重載。
    關于重載一定要注意:重載方法的參數(shù)類型和參數(shù)個數(shù)一定要不同(即:要么參數(shù)的類型不同,要么參數(shù)的個數(shù)不同,要么參數(shù)的類型和個數(shù)都不同),否則,編譯器就不知道該調(diào)用那個方法了。

    方法重載的好處就是相同的方法,帶來不同的結(jié)果和實現(xiàn),這里我們可以根據(jù)傳遞參數(shù)的不同來決定調(diào)用的方法。這是編譯時多態(tài)的一種實現(xiàn)機制。

   【1.2】C#類方法重載示例:

    我們這里給出一個簡單的c#語言實現(xiàn)的方法重載的列子,這里對于SayHelloOverLoading方法,同一個類里給出的三個方法的參數(shù)個數(shù)不同。內(nèi)部實現(xiàn)也不同。具體代碼如下:

//3.面向?qū)ο罄锏念悾绾螌崿F(xiàn)操作重載,和WCF服務類里的操作重載做對比
    public class ClassOverLoading
    {
        
public ClassOverLoading()
        { 

        }
        
//掩飾方法重載,分別實現(xiàn)三個方法,C#等面向?qū)ο蟮恼Z言提供了方法重載機制的支持。
        public string SayHelloOverLoading()
        { 
            
//編寫代碼
            return "Hello,This an C# class overloading demo";
        }
        
//類里的方法重載不需要別名
        public string SayHelloOverLoading(string name)
        {
            
//編寫代碼
            return "Hello:" + name + "This an C# class overloading demo";
        }

        
public string SayHelloOverLoading(string firstName, string lastName)

        {
            
//編寫代碼
            return "Hello:" + firstName + lastName + "This an C# class overloading demo";
        }

    }

   【2】操作重載:

   【2.1】操作重載:

    WCF服務支持核心的Web 服務協(xié)議,同樣其元數(shù)據(jù)交換也是基于XML語言描述,客戶端通過WSDL文件來了解服務方法相關的信息,包括參數(shù)的個數(shù)、類型、返回值、調(diào)用順序等重要信息。由于WSDL不支持方法的重載,因此我們的WCF服務操作重載就無法通過WSDL暴露給客戶端。如果我們在服務契約里定義了方法的重載,編譯可以正常通過,但是啟動服務宿主就會拋出System.InvalidOperationException異常,如下圖:

    因此我們不能在WCF服務內(nèi)定義和實現(xiàn)方法重載,否則無法暴露為服務操作。

   【2.2】解決辦法:

   WCF給我們提供了一個解決辦法,讓我們可以在WCF服務類里使用服務操作的重載。WCF定義了一個機制OperationContract,使用OperationContract特性的Name屬性,為操作指定別名:

[AttributeUsage(AttributeTargets.Method)]
public sealed class OperationContractAttribute : Attribute
{
   
public string Name
   {
get;set;}

   
//更多成員

}

    【3】代碼實現(xiàn)分析:

    下面我們來給出一個具體的WCF服務實現(xiàn)操作重載,包括服務定義、宿主配置、客戶端引用和測試的完整過程。

   【3.1】服務契約:

    定義了服務契約IWCFOverLoadingService,分別給出SayHelloOverLoading操作契約的3種不同定義和WCFService服務類里的實現(xiàn)。具體代碼如下:

    //1.服務契約,操作契約重載
    [ServiceContract(Namespace = "http://www.cnblogs.com/frank_xl/")]
    
public interface IWCFOverLoadingService
    {
        
//操作契約
        [OperationContract(Name = "SayHelloOverLoading1")]
        
string SayHelloOverLoading();
        
//操作契約
        [OperationContract(Name = "SayHelloOverLoading2")]
        
string SayHelloOverLoading(string name);
        
//操作契約
        [OperationContract(Name = "SayHelloOverLoading3")]
        
string SayHelloOverLoading(string firstName, string lastName);

    }
    
//2.服務類,集成接口。實現(xiàn)契約
    public class WCFService : IWCFOverLoadingService
    {
        
//實現(xiàn)接口定義的方法
        public string SayHelloOverLoading()
        {
            Console.WriteLine(
"Hello! ,This an overloading demo for WCF Service ");
            
return "Hello! This an overloading demo for WCF Service  ";
        }
        
//實現(xiàn)接口定義的方法
        public string SayHelloOverLoading(string name)
        {
            Console.WriteLine(
"Hello! {0},This an overloading demo WCF Service ", name);
            
return "Hello! " + name + ", This an overloading demo for WCF Service ";
        }
        
//實現(xiàn)接口定義的方法
        public string SayHelloOverLoading(string firstName, string lastName)
        {
            Console.WriteLine(
"Hello! {0}    {1},This an overloading demo WCF Service", firstName, lastName);
            
return "Hello! " + firstName + " " + lastName + ", This an overloading demo for WCF Service "; ;
        }
    }

   【4】運行結(jié)果:

 

    這里分別調(diào)用三種服務操作,進行測試。運行的結(jié)果如圖所示:

    【5】總結(jié):

     以上就是本節(jié)對WCF服務操作重載的介紹,包括一般重載的基本定義和c#語言中簡單的方法重載的實現(xiàn)。然后介紹了WCF操作重載的實現(xiàn)機制、局限性和解決辦法,服務契約默認不支持操作方法重載,我們可以利用WCF已有的機制給出方法的別名來解決這個問題。然后給出了包括客戶端等完整的測試解決方案,客戶端反序列話生成服務類默認不支持服務操作方法重載的,生成的也是服務操作的別名方法。我們在客戶端要想使服務代理類支持重載,以利用重載的優(yōu)勢,就需要重新修改客戶端服務代理代碼。 另外給出本節(jié)的實例代碼供大家參考:

      繼上一節(jié)WCF分布式開發(fā)步步為贏系列的(4):WCF服務可靠性傳輸配置與編程開發(fā),本節(jié)我們繼續(xù)學習WCF分布式開發(fā)步步為贏的第(5)節(jié):服務契約與操作重載。這里我們首先講解OOP面向?qū)ο蟮木幊讨蟹椒ㄖ剌d,重載的意義,WCF服務編程開發(fā)如何實現(xiàn)操作重載,隨后是代碼分析部分,給出了服務端服務契約定義和實現(xiàn)操作重載的注意的問題和實現(xiàn)過程,然后詳細介紹了客戶端實現(xiàn)操作重載的方式。

NET技術WCF分布式開發(fā)步步為贏(5)服務契約與操作重載,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 精品在线观看免费 | 婷婷色综合久久 | 国产在线综合视频 | 国产精品第1页在线观看 | 337p欧美 | 国产亚洲高清视频 | 精品中文字幕在线观看 | 台湾佬自偷自拍情侣在线 | 午夜视频福利在线观看 | 久久中文字幕不卡一二区 | 新97人人模人人爽人人喊 | 午夜免费观看_视频在线观看 | 性做久久久久久网站 | 亚洲色在线视频 | 国产真实伦在线视频免费观看 | 日韩一区二区三区免费 | 日本精品一区二区三本中文 | 亚洲一区二区三区成人 | 国产精品女同一区二区久久 | 韩国欧洲一级毛片免费 | 久热国产精品 | 91精品国产亚一区二区三区 | 91国在线啪精品一区 | 国产swag在线观看 | 久久信息网 | 国产精品欧美在线不卡 | 丁香综合缴情六月婷婷 | 国产欧美日韩综合精品一区二区三区 | 成人永久福利免费观看 | 美女扒开腿被男人猛视频 | 91精品国产91久久久久久 | 中国特级黄一级真人毛片 | 岛国一区二区 | 精品国产成人a在线观看 | 91亚洲精品色午夜麻豆 | 欧美另类videosbestsex高清 | 美女扒开双腿让男人爽透视频 | 成年女人男人免费视频播放 | 福利国产在线 | 色噜噜狠狠狠综合曰曰曰88av | 六月婷婷七月丁香 |