国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

我們一起學習WCF第五篇數據協定和消息協定

2019-11-14 15:56:09
字體:
來源:轉載
供稿:網友

      A:數據協定(“數據協定”是在服務與客戶端之間達成的正式協議,用于以抽象方式描述要交換的數據。 也就是說,為了進行通信,客戶端和服務不必共享相同的類型,而只需共享相同的數據協定。 數據協定為每個參數或返回類型精確定義為進行交換而序列化哪些數據(將哪些數據轉換為 xml)摘自MSDN)也就說數據協定是客戶端和服務端之間達成的數據協議,相互通信的參數會被序列化然后進行傳輸。那么我用圖來表示為什么用數據協定。

下面用圖來說明其幾個用處

 

那么下面我們來看看數據協定的代碼實現

1:創建一個協定類

 1  [DataContract] 2    public class People 3     { 4         /// <summary> 5         /// ID 6         /// </summary> 7         [DataMember(Name="MID")] 8         public string ID { set; get; } 9         /// <summary>10         /// 姓名11         /// </summary>12         [DataMember(Name="MName")]13         public string Name { set; get; }14         /// <summary>15         /// 序號16         /// </summary>17         [DataMember(Name="MNumber")]18         public string Number { set;get; }19         /// <summary>20         /// 年齡21         /// </summary>22        [DataMember(Name="Mage")]23         public string Age { set; get; }24     }
協定類

2:創建接口

[OperationContract]
People GetPeople(string ID);

3:實現接口

 1  public class Service:IService 2     { 3        public People GetPeople(string ID) 4        { 5            People pp=new People(); 6            pp.ID = Guid.NewGuid().ToString(); 7            pp.Name = "小馬"; 8            pp.Age = "22"; 9            pp.Number = "13559846";10            return pp;11        }
實現接口

4:服務端同上篇看看效果

5:解釋:我們在協定類的屬性最后都是按照我們定義的這么一來起著保護類實體的作用。

以上就是我簡單理解的數據協定。不足之處請指正

B:消息協定

為什么用消息協定:

您可能希望使用單個類型來表示整個消息。 雖然可將數據協定用于此目的,但建議使用消息協定來執行此操作,這可以避免在得到的 XML 中采用不必要的包裝級別。 此外,使用消息協定可以對得到的消息進行更多的控制。 例如,您可以決定哪些信息段應包含在消息正文中,哪些信息段應包含在消息頭中

從圖中我們可以看出消息協定比數據協定對信息更加容易控制。

那么我們來用代碼表示一下

1:首先我們定義一個頭消息(專門用于檢測用戶登錄信息)

 1  [MessageContract] 2    public class CheckInfo 3     { 4         /// <summary> 5         /// 用戶名 6         /// </summary> 7         [MessageHeader] 8         public string UserName { set; get; } 9         /// <summary>10         /// 密碼11         /// </summary>12         [MessageHeader]13         public string Pwd { set; get; }     14     }
驗證類

2:開始定義正文信息(用戶信息)

1 [MessageContract]  2    public class UserInfo3     {4         [MessageBodyMember]5         public string RealName { set; get; }6         [MessageBodyMember]7         public string Age { set; get; }8         [MessageBodyMember]9         public Details Udetails { set; get; }
正文類

3:做完這些之后我們就去實現這些代碼(首先進行在頭消息進行驗證)

  public UserInfo RetUserInfo(CheckInfo cki)       {           UserInfo uf = new UserInfo();           if (cki.UserName == "admin")           {               if (cki.Pwd == "123456")               {                   Console.WriteLine(cki.UserName + ":登錄成功{0}  ", DateTime.Now);                   uf = GetUserInfo();               }           }           else           {               Console.WriteLine(cki.UserName+":登錄失敗{0}  ",DateTime.Now);           }           return uf;       }
部分源碼

4:啟動服務客戶端進行引用

注意: 作為操作協定的輸入消息協定(參數)封裝了操作方法的所有in參數;作為操作協定的返回值的消息協定(return)封裝了out參數和返回值。

也就是說輸入的參數是in類型(把輸入類進行肢解)返回時out類型具體參考源碼

5:效果截圖

服務端

客戶端:

源碼下載

好了就講這么多了。歡迎指正


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 伊宁县| 襄樊市| 哈巴河县| 泰安市| 太保市| 襄樊市| 巴林左旗| 永康市| 成都市| 滨海县| 建瓯市| 德兴市| 天全县| 大关县| 留坝县| 原阳县| 阜宁县| 汶川县| 定兴县| 紫金县| 梅河口市| 章丘市| 丘北县| 磴口县| 商城县| 乐东| 上思县| 南投县| 台东县| 张家川| 绥中县| 连南| 临城县| 东乌珠穆沁旗| 吐鲁番市| 宣汉县| 绥芬河市| 沐川县| 米林县| 麻江县| 西城区|