2009-12-13 37 views
2

在ASP.NET-WCF應用程序中,我想在客戶端和服務器之間共享域類和業務規則而不重寫它們,只是就像在Silverlight RIA服務中一樣。在一個程序集中收集這些信息並從客戶端和服務器引用它可以解決這個問題,但是如何:通過向客戶端添加服務請求將在客戶端代理中生成這些類,而不會有任何行爲(方法)。我怎樣才能做到這一點?如何在RIA服務中像RIA服務那樣在客戶端和服務器之間共享域類和業務規則,只需寫一次

注:不會使用RIA服務。

編輯:一些谷歌搜索後,我遇到了CSLA.NET。它能解決這個問題嗎?

+1

爲什麼你不只是使用RIA服務? – 2009-12-13 21:01:11

+0

嗨西拉, 不久將不會使用Silverlight。 – rovsen 2009-12-13 21:03:08

+0

WCF RIA服務不僅僅適用於silverlight。 – ChadT 2009-12-14 00:12:46

回答

4

確定這裏是如何我已經做到了:作爲blowdart說我把我想的服務器和客戶端之間共享成一個單獨的組件中的所有域代碼。然後我有服務器和客戶端引用到這個共享程序集。然後添加服務引用到客戶端,但有一個例外:在添加服務引用對話框中有一個「高級」按鈕。在那裏我檢查了引用程序集中的重用類型。這樣我就擁有了爲我生成的所有代理好東西,異步方法調用等。

+0

+1」 – Gorgen 2010-08-18 05:54:57

3

您完全避免使用客戶端代理。

因此,首先將您的合同類放入共享程序集中,然後在服務器和客戶端程序中添加對該項目的引用。在客戶端中,您可以使用ChannelFactory創建到WCF服務的連接並交換數據;像

ChannelFactory<IServiceContract> factory; 
factory = new ChannelFactory<IServiceContract>(""); 

IServiceContract proxy = factory.CreateChannel(); 
using(proxy as IDisposable) 
{ 
    proxy.MyMethod(); 
} 
+0

嗨blowdart,通過不添加代理類,我們被剝奪了異步方法和其他utulities,如果有的話。只要我找到解決問題的辦法,我會盡快更新此主題。 – rovsen 2009-12-17 12:02:36

+0

您當然可以將調用包裝在後臺工作線程中,或以其他方式按摩異步行爲。 – blowdart 2009-12-17 12:13:55

+0

@arch,你可以在cleint上創建你的serivce接口的子接口,並添加「BeginXXX」方法你自己的「 – 2010-02-23 08:08:44