自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

WCF數(shù)據(jù)表基本概念解讀

開(kāi)發(fā) 開(kāi)發(fā)工具
WCF數(shù)據(jù)表類型在服務(wù)契約中的使用,對(duì)于大部分初學(xué)者來(lái)說(shuō)可能還不是很熟悉。那么今天我們就會(huì)針對(duì)這一問(wèn)題,做一個(gè)詳細(xì)介紹。

WCF開(kāi)發(fā)工具中,我們可以通過(guò)對(duì)此的應(yīng)用來(lái)獲得一些技術(shù)上的幫助,從而輕松的完成各種功能需求。今天我們就先來(lái)看看WCF數(shù)據(jù)表的相關(guān)概念。DataSet以及WCF數(shù)據(jù)表類型是可序列化的,因而我們可以在服務(wù)契約中接收或返回?cái)?shù)據(jù)表或數(shù)據(jù)集。

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

  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(); } 

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

  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; } } 

我們可以手動(dòng)將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; } 

當(dāng)然,前提條件是我們需要修改AddContactRequest類以及GetContactsResponse,例如將AddContactRequest類的contacts成員由原來(lái)的AddContactsContacts類型修改為DataTable類型;將GetContactsResponse中的GetContactsResult成員由原來(lái)的GetContactsResponseGetContactsResult類型修改為WCF數(shù)據(jù)表類型。

自動(dòng)生成的代理類非常復(fù)雜,實(shí)際上我們完全可以簡(jiǎn)化。首先將客戶端的服務(wù)契約定義修改為與服務(wù)端服務(wù)契約完全一致的定義:

  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. } } 

以上就是對(duì)WCF數(shù)據(jù)表類型的相關(guān)概念。

【編輯推薦】

  1. WCF實(shí)現(xiàn)SOA相關(guān)操作步驟詳解
  2. WCF體系架構(gòu)基本概念解讀
  3. WCF服務(wù)契約基本應(yīng)用技巧解讀
  4. WCF限流操作實(shí)際設(shè)置方式揭秘
  5. WCF實(shí)例停用基本應(yīng)用技巧分享
責(zé)任編輯:曹凱 來(lái)源: IT168
相關(guān)推薦

2010-03-01 16:25:07

WCF體系架構(gòu)

2009-12-22 10:16:54

WCF服務(wù)狀態(tài)

2009-12-21 10:27:52

WCF基本概念

2010-02-23 16:32:29

WCF服務(wù)

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宿主環(huán)境

2010-03-02 13:14:38

WCF MSMQ隊(duì)列

2010-03-02 16:22:31

WCF狀態(tài)應(yīng)用

2009-12-21 16:52:02

WCF序列化

2009-12-21 14:37:14

2010-02-25 14:46:31

2010-03-02 11:10:43

WCF標(biāo)準(zhǔn)終結(jié)點(diǎn)

2010-03-01 17:57:11

WCF緩存機(jī)制

2010-01-25 10:57:57

Android系統(tǒng)應(yīng)用

2011-03-28 11:05:17

ODBC

2010-07-02 11:48:30

RS-232C協(xié)議

2009-11-25 14:56:43

2014-04-16 15:11:19

Spark
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)