C# 远程课程组织

C# 远程课程组织,c#,remoting,class-library,code-organization,C#,Remoting,Class Library,Code Organization,我正在开发一个远程处理类库,这样我就可以在服务器上而不是客户端上保持数据库交互和业务对象 我希望能够将我自己的对象返回给客户机,以便客户机可以通过服务器本身与它们交互 例如,半伪码: 服务器 class Database { ... } class Utility { public User getUser(username) { return new User(username); } } class User { public string[] getPerms()

我正在开发一个远程处理类库,这样我就可以在服务器上而不是客户端上保持数据库交互和业务对象

我希望能够将我自己的对象返回给客户机,以便客户机可以通过服务器本身与它们交互

例如,半伪码:

服务器

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();
如何组织我的类/名称空间?我特别想知道我的系统的类引用和可伸缩性


任何形式的批评/建议都是非常感谢的。

我不是故意吹嘘,但你可能想看看WCF。远程处理非常健谈,通过.Net维护干净接口的真正支持是通过WCF和消息传递来实现的,而不是通过远程处理来进行完整的对象状态管理


听起来您正在做的是开发一个用于管理数据库连接的中间层。只需确保最终不会重新开发到SQL server的接口。

我倾向于将所有“共享”数据传输对象类放在一个单独的DLL中,服务器和客户机都引用该DLL。如果要使用客户机代码分发,您可以将它们放在与服务器类相同的DLL中

通过将它们放在一个单独的组件中,您可以加强DTO的解耦以及用于远程传输它们的底层技术。 这意味着,如果您最终重写了远程调用技术,那么您就不必接触DTO,只需重新使用程序集即可

不要忘记将DTO标记为具有[Serailizable]属性,以便它们可以在客户端和服务器之间传输


赫比

你为什么不想使用WCF?因为我不太清楚。我将尝试一下。那么使用WCF我可以通过我自己的类,比如上面的例子?你知道在哪里可以找到这样的例子吗?感谢您可以为创建数据协定的所有内容都可以通过WCF发送。您甚至可以使用WCF发送流,这对于非常大的传输非常有用。