成人免费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-03-02 11:10:43

WCF標準終結點

2010-02-25 14:46:31

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技術棧公眾號

主站蜘蛛池模板: 国产精产国品一二三产区视频 | 日本成人二区 | 国产免费让你躁在线视频 | 中文字幕 在线观看 | 69av片| 亚洲永久 | 国产日韩欧美中文字幕 | 欧美精品在线观看 | 国产日韩精品视频 | 99热99 | 日本成人免费网站 | 日韩高清一区 | 国产成人a亚洲精品 | 91综合网| 91免费观看 | 超碰人人91 | 日韩av在线一区 | 日韩久久久久久 | 亚洲欧美日韩一区二区 | 一呦二呦三呦国产精品 | 中文字幕第一页在线 | 成人av电影在线 | 在线观看成人小视频 | av色站| 国产视频久久 | 日韩视频免费 | 黄色国产 | 日韩精品视频在线观看一区二区三区 | 免费精品国产 | 久久久涩 | 天天影视网天天综合色在线播放 | 久草视频在线播放 | 欧美精品一区二区三区在线播放 | 国产原创在线观看 | 亚洲欧美第一视频 | 亚洲国产一区二区三区在线观看 | 久久久久久久久国产精品 | 一区二区在线观看免费视频 | 日韩综合在线 | 久久精品69 | 中文字幕一区二区三区在线观看 |