2009-10-30 210 views
3

我有一個問題,但首先我想知道如果即時通訊工作的最佳解決方案。將類傳遞給WCF服務

我正在製作一個應用程序,該應用程序將位於數百臺客戶端計算機上,並將數據發送到服務器/從數據庫中讀取數據。服務器將獲得該數據並存儲/處理它。

我希望客戶端應用盡可能輕量級,因此我希望服務器以類的形式傳遞/接收數據。例如

客戶端請求用戶ID(用戶ID) 服務器響應具有用戶名,ID和個人信息的UserDetails類。

另一個例子是

客戶端請求項目 服務器ProjectDetails類有項目編號,名稱,描述,細節和活動的列表(這是另一個類,所以應該實現爲ActivitiesCollection響應)

我剛開始在這個,發現很多人說WCF服務的路要走,但我從來沒有寫過一個之前。這是真的?如果是的話,我如何將複雜類傳遞給WCF服務/從WCF服務傳遞?

感謝所有:)

〜戴夫

回答

11

WCF服務由合同的 - 服務合同定義了服務的行爲(例如,您的服務方法,可以調用),然後有它定義了哪些數據被傳來傳的數據合同。

這些只是.NET類的屬性,將它們暴露給WCF運行時。

在你的情況,你可能會碰到這樣的:

[ServiceContract] 
interface MyUserService 
{ 
    [OperationContract] 
    UserDetails GetUserDetails(int userId); 
} 

,然後將數據:

[DataContract] 
class UserDetails 
{ 
    [DataMember] 
    int userId { get; set; } 

    [DataMember] 
    string userName { get; set; } 
} 

WCF是非常靈活的,給你很多的控制權和如何發送什麼內容,並自動處理所有序列化和其他問題。沒有必要自己亂用角度支架湯!

查看WCF Developer Center瞭解大量優秀內容,操作方法視頻,文章等內容 - 應該可以幫助您快速入門!

Marc

+0

冠軍的東西隊友,我看着數據合同的東西,但它對我毫無意義。這是我見過的最清晰的探索 – TerrorAustralis 2009-10-30 12:54:59

0

爲什麼不XML序列化數據?不把它當做'類'本身的能力是你可以擁有許多不同的客戶端,它們可以針對標準平臺不可知的API進行編碼。這就是最終使用的服務,允許不同的應用程序和語言與單個終端進行通信。

+0

感謝您的回覆。就像我說的,我是WCF服務的新手,只是在這裏做一個推薦。該程序只能與Windows平臺進行交互,WCF甚至可以採用這種方式? – TerrorAustralis 2009-10-30 03:01:49

+0

再次感謝,我認爲我已經通過向我的服務添加項目引用來解決此問題,所以我可以在服務和表單應用中使用相同的類。 – TerrorAustralis 2009-10-30 03:32:25

+0

服務參考只是生成客戶端代理。這使得您作爲開發人員更容易,因此您不必手動創建請求並處理響應。 – 2009-10-30 03:34:46

2

WCF爲您做到這一點。這就像在WCF .NET之前使用Web服務一樣 - 「結構」是爲您創建的,您只需填充它們的屬性即可。

  1. 創建服務
  2. 業務對象寫它出版這些對象作爲方法參數
  3. 生成帶你將消費服務的服務代理的服務。

自動生成的服務代理將包含您需要的每個業務對象的類。這很容易。

您的評論,你

通過增加一個項目 指向同我的服務解決了這個問題提這樣我就可以通過服務,我 形式的應用程序(原文如此)使用 相同的類。

這是一種合法的方式,但不需要以這種方式共享對象。如果您在客戶端上生成服務代理,則會創建這些相同的類。您甚至可以在您的客戶端應用程序中保存一些權重,因爲只會創建所需的類。

+0

非常感謝評論。你和marc_s真的幫了我,可憐我不能給一個單一的問題兩個'答案':) – TerrorAustralis 2009-10-30 12:54:03

+0

如果你喜歡這個答案,你可以標記它!點擊「向上」箭頭整齊大零:-) – 2009-10-30 15:31:47