2010-02-08 37 views
0

我正在研究一個相當大的WSSF項目。我在業務層中有一個正常的對象模型。例如,一個客戶有一個訂單收集屬性,當它被訪問時,它會從數據層加載(延遲加載)。訂單有productCollection屬性等等等等。WCF:暴露的對象模型 - 卡在循環中

現在我發現棘手位是通過WCF暴露這一點。我想要導出一組訂單。客戶端應用程序還需要有關客戶的信息。我使用WSSF數據合同設計師進行了設置,以便客戶擁有一個名爲「訂單收集」的屬性。如果您有客戶對象並希望查看訂單,但是如果您有訂單對象,則沒有客戶屬性,因此不會在層次結構上運行。

我已經嘗試添加一個客戶屬性的命令對象,但隨後的代碼被卡住在加載時的數據契約了一個循環。這是因爲它不像業務層那樣按需加載。我需要加載所有的屬性,然後才能通過WCF發送對象。它結束了加載順序,那麼客戶該訂單,然後將訂單客戶,那麼客戶該訂單等等...

我敢肯定,我已經得到了這一切錯誤的。幫幫我!!

回答

0

一般來說,WCF,這是最好的認爲合同不作爲「遠程對象」,但你可以打電話得到的數據或數據傳遞到接口。

在返回的對象上調用的任何方法都在本地處理,而不是對象來源的位置。事實上,從服務器獲取'相同'對象兩次通常會導致客戶端的兩個完全分離的對象!

爲了讓你問一下,你可能需要寫一些客戶端代碼來創建一個遠程對象的「幻想」給你的那種功能。

+0

嗨恐龍 感謝您的答覆。其實我明白他們是數據合同而不是全面的業務對象。事情是我想發送一些數據,所以爲什麼不把它作爲一個對象集合(數據契約)與其他數據契約集合的屬性一起發送。我想現在我意識到,由於循環問題,這是不可能的。我想我只會返回一組具有customerId屬性的簡單訂單對象。然後客戶端代碼可以遍歷訂單集合並加載客戶。這會更慢,但希望更正? - 馬克 – 2010-02-08 22:35:28

+0

我可能會避免這種情況 - 只要有可能,你想調用你的服務是原子的。如果由於週期造成的問題很大,請考慮對包含客戶的訂單和附加訂單的客戶使用單獨的DataContracts。而且,當然,如果你想要...你是否使用單獨的數據傳輸對象,或者試圖用邏輯返回「原始」業務對象,你總是可以將其中一個屬性留空? – kyoryu 2010-02-14 20:22:32