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

理解WCF中的Contracts

系統 1952 0

WCF中的Contracts

WCF通過Contract來說明服務和操作,一般包含五種類型的Contract:ServiceContract,OperationContract,FaultContract,DataContract,MessageContract。

?

1.ServiceContract

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

      
           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的內部,定義了具體的服務操作。在此基礎上,可以對操作的事務,綁定(One-way,Two-way等)和FaultContract信息。

?

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

?

3.Data Contract

定義了服務器和客戶端交互的內容,它可以標識類,以便作為OperationContract的參數或者返回類型。

      
           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

當OperationContract需要傳遞參數或者返回值時,可以使用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定義了服務可能出現的異常信息,以及服務隊錯誤的處理和錯誤信息拋出到客戶端的內容。一個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的比較

區別

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

MessageContract則描述了SOAP消息的結構,最終在服務器和客戶端進行傳遞,因此能夠對SOAP信息的Header和Bodies進行直接的訪問和處理,可以對復雜的類型進行處理。

?

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

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

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

?

不要混用MessageContract和DataContract

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

理解WCF中的Contracts


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 美女个护士一级毛片亚洲 | 久久精品国产99精品最新 | 国产欧美日韩精品a在线观看 | 国产二区三区毛片 | 成人美女网 | 九九九精品视频 | 中文字幕在线激情日韩一区 | 国产伦精品一区二区三区免费迷 | 日韩a免费 | 亚洲精品久久成人福利 | 婷婷色网站| 国产欧美日韩免费一区二区 | 亚洲免费在线看 | 亚洲狠狠婷婷综合久久久久图片 | 欧美国产日产精品免费视频 | 国产一区二区三区不卡免费观看 | 日本黄 色 成 年 人免费观看 | 亚洲性在线 | 国产美女一级高清免费观看 | 8090碰成年女人免费碰碰尤物 | 夜夜躁日日躁狠狠 | 久热re国产手机在线观看 | 久久精品女人天堂 | 久操视频在线免费观看 | 精品国产亚洲一区二区三区 | 泰国一级毛片aaa下面毛多 | 亚洲国产欧美精品一区二区三区 | 这里只有精品国产 | 久久99精品一久久久久久 | 国产在线观看成人免费视频 | 中文字幕国产在线观看 | 精品视频一区二区三区免费 | 亚洲综合图区 | 日日操夜夜爽 | 欧美肥老妇做爰视频 | 久久一区二区免费播放 | 中文字幕一区视频一线 | 亚洲偷自拍另类图片二区 | 999yy成年在线视频免费看 | 麻豆久久久久久久 | 午夜国产福利在线观看 |