成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WCF數據表基本概念解讀

開發 開發工具
WCF數據表類型在服務契約中的使用,對于大部分初學者來說可能還不是很熟悉。那么今天我們就會針對這一問題,做一個詳細介紹。

WCF開發工具中,我們可以通過對此的應用來獲得一些技術上的幫助,從而輕松的完成各種功能需求。今天我們就先來看看WCF數據表的相關概念。DataSet以及WCF數據表類型是可序列化的,因而我們可以在服務契約中接收或返回數據表或數據集。

如果服務契約使用了DataSet和DataTable類型,生成的代理文件不會直接使用DataSet和DataTable類型,而是包含DataTable數據契約的定義(只包含DataTable的樣式,而不包含任何代碼)。但我們可以手工修改這些定義。例如這樣的服務契約:

  1. [ServiceContract()]   
  2. public interface IContactManager {   
  3. [OperationContract]   
  4. void AddContact(Contact contact);   
  5. [OperationContract]   
  6. void AddContacts(DataTable contacts);   
  7. [OperationContract]   
  8. DataTable GetContacts(); } 

那么生成的代理文件可能會是這樣:

  1. public interface IContactManager {   
  2. [System.ServiceModel.OperationContractAttribute(
    Action="http://tempuri.org/IContactManager/AddContact"
    ReplyAction="http://tempuri.org/IContactManager/AddContactResponse")]   
  3. [System.ServiceModel.XmlSerializerFormatAttribute()]   
  4. void AddContact(Contact contact);   
  5. [System.ServiceModel.OperationContractAttribute(
    Action="http://tempuri.org/IContactManager/AddContacts",
    ReplyAction="http://tempuri.org/IContactManager/AddContactsResponse")]   
  6. [System.ServiceModel.XmlSerializerFormatAttribute()]   
  7. AddContactsResponse AddContacts(AddContactsRequest request);   
  8. [System.ServiceModel.OperationContractAttribute(
    Action="http://tempuri.org/IContactManager/GetContacts",
    ReplyAction="http://tempuri.org/IContactManager/GetContactsResponse")]   
  9. [System.ServiceModel.XmlSerializerFormatAttribute()]   
  10. GetContactsResponse GetContacts(GetContactsRequest request); }  

代理類的定義則如下所示:

  1. [System.Diagnostics.DebuggerStepThroughAttribute()]   
  2. [System.CodeDom.Compiler.GeneratedCodeAttribute
    ("System.ServiceModel", "3.0.0.0")]   
  3. public partial class ContactManagerClient : 
    System.ServiceModel.ClientBase
    <IContactManager>,   
  4. IContactManager { //其余成員略;   
  5. public void AddContact(Contact contact) 
    { base.Channel.AddContact(contact);   
  6. }   
  7. AddContactsResponse IContactManager.AddContacts
    (AddContactsRequest request) {   
  8. return base.Channel.AddContacts(request); }   
  9. public void AddContacts(AddContactsContacts contacts) {   
  10. AddContactsRequest inValue = new AddContactsRequest();   
  11. inValue.contacts = contacts;   
  12. AddContactsResponse retVal = ((IContactManager)(this)).
    AddContacts(inValue); }   
  13. GetContactsResponse IContactManager.GetContacts
    (GetContactsRequest request) {   
  14. return base.Channel.GetContacts(request); }   
  15. public GetContactsResponseGetContactsResult GetContacts() {   
  16. GetContactsRequest inValue = new GetContactsRequest();   
  17. GetContactsResponse retVal = ((IContactManager)(this)).
    GetContacts(inValue);   
  18. return retVal.GetContactsResult; } } 

我們可以手動將AddContacts()與GetContacts()方法修改為:

  1. public void AddContacts(DataTable contacts) {   
  2. AddContactsRequest inValue = new AddContactsRequest();   
  3. inValue.contacts = contacts;   
  4. AddContactsResponse retVal = ((IContactManager)(this)).
    AddContacts(inValue); }   
  5. public DataTable GetContacts() {   
  6. GetContactsRequest inValue = new GetContactsRequest();   
  7. GetContactsResponse retVal = ((IContactManager)(this)).
    GetContacts(inValue);   
  8. return retVal.GetContactsResult; } 

當然,前提條件是我們需要修改AddContactRequest類以及GetContactsResponse,例如將AddContactRequest類的contacts成員由原來的AddContactsContacts類型修改為DataTable類型;將GetContactsResponse中的GetContactsResult成員由原來的GetContactsResponseGetContactsResult類型修改為WCF數據表類型。

自動生成的代理類非常復雜,實際上我們完全可以簡化。首先將客戶端的服務契約定義修改為與服務端服務契約完全一致的定義:

  1. [ServiceContract()]   
  2. public interface IContactManager {   
  3. [OperationContract]   
  4. void AddContact(Contact contact);   
  5. [OperationContract]   
  6. void AddContacts(DataTable contacts);   
  7. [OperationContract] DataTable GetContacts(); } 

然后修改代理類ContactManagerClient:

  1. public partial class ContactManagerClient : System.ServiceModel.
    ClientBase
    <IContactManager>,   
  2. IContactManager {   
  3. public void AddContact(Contact contact) { base.Channel.
    AddContact(contact); }   
  4. public void AddContacts(DataTable contacts) 
    { base.Channel.AddContacts(contacts); }   
  5. public DataTable GetContacts() {   
  6. return base.Channel.GetContacts();   
  7. } } 

以上就是對WCF數據表類型的相關概念。

【編輯推薦】

  1. WCF實現SOA相關操作步驟詳解
  2. WCF體系架構基本概念解讀
  3. WCF服務契約基本應用技巧解讀
  4. WCF限流操作實際設置方式揭秘
  5. WCF實例停用基本應用技巧分享
責任編輯:曹凱 來源: IT168
相關推薦

2010-03-01 16:25:07

WCF體系架構

2009-12-22 10:16:54

WCF服務狀態

2009-12-21 10:27:52

WCF基本概念

2010-02-23 16:32:29

WCF服務

2009-12-21 15:33:07

WCF集合元素

2010-03-01 14:50:30

WCF行為類型

2010-03-01 18:04:35

WCF配置綁定

2010-02-24 17:17:04

WCF宿主環境

2010-03-02 13:14:38

WCF MSMQ隊列

2009-12-21 14:37:14

2010-03-02 16:22:31

WCF狀態應用

2009-12-21 16:52:02

WCF序列化

2010-02-25 14:46:31

2010-03-02 11:10:43

WCF標準終結點

2010-03-01 17:57:11

WCF緩存機制

2010-01-25 10:57:57

Android系統應用

2011-03-28 11:05:17

ODBC

2010-07-02 11:48:30

RS-232C協議

2009-11-25 14:56:43

2014-04-16 15:11:19

Spark
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 伊人狠狠干| 国产日产欧产精品精品推荐蛮挑 | 人人干人人玩 | 男人久久天堂 | 日韩成人在线免费观看 | 国产一二区免费视频 | 亚洲欧美在线观看 | 中文字字幕在线中文乱码范文 | 婷婷激情在线 | 久草热播 | 国产成人高清视频 | 免费黄篇| 男女网站视频 | 网络毛片| 日韩三级 | 亚洲国产精品久久久 | 狠狠的干| 三级av在线| 我爱操 | 久久久成 | 人人澡人人爱 | 国产在线视频一区 | 久久久精| 欧美 日韩精品 | 精品欧美乱码久久久久久 | 91视频在线| 视频一区二区三区在线观看 | 中文字幕一区二区三区在线观看 | 91 久久| 在线一区观看 | 欧美11一13sex性hd | 久久九九影视 | 日韩午夜场 | 午夜黄色| 国产精品日日做人人爱 | 日韩欧美一区二区三区免费看 | 在线观看中文字幕视频 | 精品自拍视频 | 日韩免费福利视频 | 免费高清av | 亚洲色图网址 |