2010-06-25 78 views
0

我正在開發一個Remoting類庫,以便我可以在服務器上而不是客戶端上保持數據庫交互和業務對象。C#Remoting類組織

我希望能夠將自己的對象返回給客戶端,以便他們可以通過服務器本身與它們進行交互。

例如(半僞代碼):

服務器

class Database { ... } 
class Utility 
{ 
    public User getUser(username) 
    { 
    return new User(username); 
    } 
} 
class User 
{ 
    public string[] getPerms() 
    { 
    return Database.query("select * from permission where user = " + this.username); 
    } 
} 

客戶

Utility utility = (Utility)getRemotingClass("Utility"); 
User user = Utility.getUser("admin"); 
string[] perms = user.getPerms(); 

我如何安排我的類/命名空間?我特別想知道我的系統的類參考和可擴展性。

任何形式的批評/建議真的很感激。

+0

爲什麼你不想使用WCF? – Incognito 2010-06-25 10:32:38

+0

因爲我不太清楚。我會試一試。 – Keeper 2010-06-25 13:55:09

回答

0

我並不是要打鼓,但你可能想看看WCF。遠程處理非常瑣碎,通過.Net維護清潔接口的真正支持是通過WCF和消息傳遞完成的,而不是通過遠程處理完成對象狀態管理。

它聽起來像你正在做的是開發一箇中間層來管理數據庫連接。只要確保你不會重新開發接口到SQL服務器。

+0

所以在WCF中,我可以像我上面的例子那樣傳遞我自己的類?你知道在哪裏可以找到這樣的例子嗎?謝謝 – Keeper 2010-06-25 14:03:25

+0

http://msdn.microsoft.com/en-us/library/aa480190.aspx – Spence 2010-06-25 17:53:37

+0

您可以創建數據協定的任何內容都可以通過WCF發送。您甚至可以使用WCF「發送」流,這對於非常大的傳輸非常有用。 – Spence 2010-06-25 17:54:51

0

我傾向於把所有'共享'(數據傳輸對象)類放在一個單獨的DLL中,服務器和客戶端都參考(如果你打算將它們放在與服務器類相同的DLL中無論如何分發它與客戶端代碼)。

通過將它們放入單獨的裝配中,可以加強DTO的分離和用於遠程傳輸它們的基礎技術。 這意味着,如果您最終重寫遠程呼叫技術,您將不必觸摸DTO,只需重新使用該組件即可。

不要忘記將DTO標記爲[Serailizable]屬性,以便它們可以在客戶端和服務器之間傳輸。

Herbie