亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

理解WCF中的Contracts

系統(tǒng) 1700 0

WCF中的Contracts

WCF通過Contract來說明服務(wù)和操作,一般包含五種類型的Contract:ServiceContract,OperationContract,F(xiàn)aultContract,DataContract,MessageContract。

?

1.ServiceContract

ServiceContract向外部暴漏了可以提供的服務(wù)接口,它可以包含服務(wù)名稱、命名空間等服務(wù)器端的配置信息。

      
           1:  
      
      [ServiceContract]
    
      
           2:  
      
      
        interface
      
       IMyContract
    
      
           3:  
      
      {
    
      
           4:  
      
       [OperationContract]
    
      
           5:  
      
      
        string
      
       MyMethod();
    
      
           6:  
      
      }
    
      
           7:  
      
    
      
           8:  
      
      
        class
      
       MyService : IMyContract
    
      
           9:  
      
      {
    
      
          10:  
      
      
        public
      
      
        string
      
       MyMethod()
    
      
          11:  
      
       {
    
      
          12:  
      
      
        return
      
      
        "Hello World"
      
      ;
    
      
          13:  
      
       }
    
      
          14:  
      
      }
    

?

2.OperationContract

OperationContract定義在ServiceContract的內(nèi)部,定義了具體的服務(wù)操作。在此基礎(chǔ)上,可以對操作的事務(wù),綁定(One-way,Two-way等)和FaultContract信息。

?

      
           1:  
      
       [ServiceContract]
    
      
           2:  
      
      
        interface
      
       IMyContract
    
      
           3:  
      
       {
    
      
           4:  
      
       [FaultContract(
      
        typeof
      
      (MyFaultContract))]
    
      
           5:  
      
       [OperationContract]
    
      
           6:  
      
      
        string
      
       MyMethod();
    
      
           7:  
      
       }
    

?

3.Data Contract

定義了服務(wù)器和客戶端交互的內(nèi)容,它可以標(biāo)識類,以便作為OperationContract的參數(shù)或者返回類型。

      
           1:  
      
      [DataContract]
    
      
           2:  
      
      
        class
      
       Person
    
      
           3:  
      
      {
    
      
           4:  
      
       [DataMember]
    
      
           5:  
      
      
        public
      
      
        string
      
       ID;
    
      
           6:  
      
       [DataMember]
    
      
           7:  
      
      
        public
      
      
        string
      
       Name;
    
      
           8:  
      
      }
    
      
           9:  
      
    
      
          10:  
      
      [ServiceContract]
    
      
          11:  
      
      
        interface
      
       IMyContract
    
      
          12:  
      
      {
    
      
          13:  
      
       [OperationContract]
    
      
          14:  
      
       Person GetPerson(
      
        int
      
       ID);
    
      
          15:  
      
      }
    

?

4.MessageContract

當(dāng)OperationContract需要傳遞參數(shù)或者返回值時,可以使用MessageContract。它可以定義消息的Header和Body,以及安全性等。

      
           1:  
      
      [ServiceContract]
    
      
           2:  
      
      
        public
      
      
        interface
      
       IRentalService
    
      
           3:  
      
      {
    
      
           4:  
      
       [OperationContract]
    
      
           5:  
      
      
        double
      
       CalPrice(PriceCalculate request);
    
      
           6:  
      
      }
    
      
           7:  
      
    
      
           8:  
      
      [MessageContract]
    
      
           9:  
      
      
        public
      
      
        class
      
       PriceCalculate
    
      
          10:  
      
      {
    
      
          11:  
      
       [MessageHeader]
    
      
          12:  
      
      
        public
      
       MyHeader SoapHeader { get; set; }
    
      
          13:  
      
       [MessageBodyMember]
    
      
          14:  
      
      
        public
      
       PriceCal PriceCalculation { get; set; }
    
      
          15:  
      
      }
    
      
          16:  
      
    
      
          17:  
      
      [DataContract]
    
      
          18:  
      
      
        public
      
      
        class
      
       MyHeader
    
      
          19:  
      
      {
    
      
          20:  
      
       [DataMember]
    
      
          21:  
      
      
        public
      
      
        string
      
       UserID { get; set; }
    
      
          22:  
      
      }
    
      
          23:  
      
    
      
          24:  
      
      [DataContract]
    
      
          25:  
      
      
        public
      
      
        class
      
       PriceCal
    
      
          26:  
      
      {
    
      
          27:  
      
       [DataMember]
    
      
          28:  
      
      
        public
      
       DateTime PickupDateTime { get; set; }
    
      
          29:  
      
       [DataMember]
    
      
          30:  
      
      
        public
      
       DateTime ReturnDateTime { get; set; }
    
      
          31:  
      
       [DataMember]
    
      
          32:  
      
      
        public
      
      
        string
      
       PickupLocation { get; set; }
    
      
          33:  
      
       [DataMember]
    
      
          34:  
      
      
        public
      
      
        string
      
       ReturnLocation { get; set; }
    
      
          35:  
      
       }
    
      
          36:  
      
    

?

5.FaultContract

FaultContract定義了服務(wù)可能出現(xiàn)的異常信息,以及服務(wù)隊錯誤的處理和錯誤信息拋出到客戶端的內(nèi)容。一個OperationContact可以包含0個或多個FaultContract。

      
           1:  
      
      [ServiceContract]
    
      
           2:  
      
      
        interface
      
       IMyContract
    
      
           3:  
      
      {
    
      
           4:  
      
       [FaultContract(
      
        typeof
      
      (MyFaultContract1))]
    
      
           5:  
      
       [FaultContract(
      
        typeof
      
      (MyFaultContract2))]
    
      
           6:  
      
       [OperationContract]
    
      
           7:  
      
      
        string
      
       MyMethod();
    
      
           8:  
      
    
      
           9:  
      
       [OperationContract]
    
      
          10:  
      
      
        string
      
       MyShow();
    
      
          11:  
      
       }
    

?

MessageContract和DataContract的比較

區(qū)別

DataContract提供了一種將.net的CLR類型映射為可以被其他應(yīng)用程序識別的基于W3C的Xml的方法,使得不同的應(yīng)用間無須考慮對應(yīng)使用的是什么類型的數(shù)據(jù),而只需關(guān)注這些被抽象的Xml信息。

MessageContract則描述了SOAP消息的結(jié)構(gòu),最終在服務(wù)器和客戶端進行傳遞,因此能夠?qū)OAP信息的Header和Bodies進行直接的訪問和處理,可以對復(fù)雜的類型進行處理。

?

為什么需要或者什么時候使用MessageContract

MessageContract一般只在你需要對消息體進行直接控制的時候使用,例如添加特定的Header,F(xiàn)ooter等信息。在一些場合,如果需要在消息中包含Session相關(guān)的信息時,通過Header進行傳遞,則無需像消息體中增加額外的參數(shù)。或者有時你需要提供一個自定義的安全協(xié)議或者在應(yīng)用間傳遞身份令牌。

當(dāng)然,使用MessageContract時需要從SOAP Header中檢索信息,而不是直接序列化后進行處理。

?

不要混用MessageContract和DataContract

對于一個OperationContract來說,不要在參數(shù)和返回值中分別使用MessageContract和DataContract,否則在生成WSDL時會引起運行時錯誤。

理解WCF中的Contracts


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国模和精品嫩模私拍视频 | 日本在线观看www鲁啊鲁视频 | 亚洲欧洲一二三区机械有限公司 | 99热伊人| 久久婷婷是五月综合色狠狠 | 九热视频| 神马影院在线观看我不卡 | 色sese | 久久国产精品吴梦梦 | 九九精品视频在线播放8 | 国产日韩欧美精品一区二区三区 | 国产大尺度福利视频在线 | 色拍拍噜噜噜aⅴ在线观看 色拍拍欧美视频在线看 | 亚洲综合伦理一区 | 天天插日日操 | 成人亚洲欧美日韩在线观看 | 亚洲国产成人久久综合碰 | 玖玖在线免费视频 | 香蕉福利| 国产a高清| 免费一级成人毛片 | 国产亚洲欧美在线视频 | 男人猛桶女人下面视频国产 | 99热这里只有精品国产在热久久 | 精品欧美一区二区三区在线 | 全部免费国产潢色一级 | 青青青在线观看免费视频精品 | 波多野结衣中文字幕一区二区 | 亚洲和欧美毛片久久久久 | 欧美大片国产在线永久播放 | 91精品啪国产在线观看免费牛牛 | 一级女性全黄生活片免费 | 欧美乱子伦一区二区三区 | 久久综合视频网 | 女人18特级一级毛片免费视频 | 亚洲午夜久久久久中文字幕久 | 欧美乱一级在线观看 | 中文字幕亚洲图片 | 国产伦码精品一区二区三区 | 奇米影视亚洲春色77777 | 亚洲成人在线视频播放 |