2011-03-01 85 views
3

我在客戶端UI(Silverlight 3.0)和數據層之間使用WCF服務。我們使用NHibernate進行數據庫訪問。所以請告訴我,如果我的下面的理解是否正確:瞭解WCF如何工作

  • 用戶界面調用WCF爲保存方法(例如)。
  • WCF在其中有一個Save方法,它實際上封裝了來自Data Access Object的Save方法。
  • 保存的數據訪問對象方法反過來封裝了一個默認的保存方法 NHibernate它實際上將一些業務對象保存到數據庫中。

也可以有人告訴我,我們如何將對象從WCF傳遞到UI(Silverlight 3.0)層,反之亦然。我已經讀過,我們使用DTO。但是DTO是如何工作的?它們是否符合WCF中的「數據合同」?如果不是,那麼DTO是否在WCF(服務器)端和客戶端代碼上聲明?

+1

非常感謝提醒我的規則。抱歉沒有關注他們。 – 2011-03-01 18:01:14

回答

5

不,不太....

  • UI調用客戶端的代理方法Save
  • WCF運行時需要該呼叫和傳遞的所有參數,並將其序列化到消息(典型的是XML序列化消息)
  • WCF運行時發送序列化消息在某種傳輸媒體的(不管它是)
  • 在服務器端,WCF運行時接受了輸入消息
  • 消息被反序列化,適當的類和方法來處理它被識別
  • 通常爲:服務類的新實例被實例化來處理
  • WCF運行時解壓縮的參數請求,並調用適當的消息服務類

  • 相同的步驟 - 基本上向後 - 是爲響應完成

重要的一點:唯一噸之間他的客戶端和服務器是序列化消息(這可以通過e-mail或鴿快遞發送) - 有沒有其他連接 - 在所有

+1

非常感謝您的回答。 – 2011-03-01 17:22:50

+0

我得到了在使用WCF時傳遞XML的消息的概念。我的理解是,如果我們想要從WCF將Employee對象的值傳遞給UI,那麼我們將Employee聲明爲Data Contract並將值傳遞給WCF。如果我錯了,那麼請糾正。如果是這種情況,那麼Employee類在某種程度上代表DTO? – 2011-03-01 17:28:14

+0

@tahoka:你絕對正確。 DataContract描述了CLR對象如何序列化成消息。是的 - 這些對象通常是數據傳輸對象 - 只是屬性,沒有功能 – 2011-03-01 17:30:26

1

marc_s沒有「遠程對象調用」或類似的東西提到客戶端代理,可以通過Silverlight項目中的service references生成。生成的代理足夠體面,併爲從Silverlight端運行請求提供異步模型;那些看起來大多像遠程過程調用。

另一種方法是直接使用精簡版(但也許更先進?)渠道工廠。一個簡單的例子可以找到here。這兩種方法都爲您處理大部分序列化細節。

+0

好點 - 但基本前提不會改變 - WCF仍然只交換序列化消息,沒有任何類型的「遠程對象」連接... – 2011-03-01 15:39:09

+1

完全同意。我提高了你對交換的描述,可能實際上在談話中使用它(與免責聲明!)。在我的文章中,我試圖增加如何讓​​交換工作。 – ale 2011-03-01 16:43:04