【问题标题】:C# .NET Remoting Best Practice?C# .NET 远程处理最佳实践?
【发布时间】:2012-03-05 08:54:14
【问题描述】:

好的,我知道我对 .NET 远程处理非常陌生,就最佳实践而言,我有一个问题。首先,我已经构建了一个内部应用程序,并且有我引用的 dll 来为我处理所有数据。我希望我的应用程序的服务器版本能够利用所有这些类及其方法,并能够来回传递这些自定义对象。

我的问题是,我是否应该将 [Serializable] 应用于我想要来回传递的所有类,然后创建专门使用我的 Get、AddOrUpdate、Delete 等方法的特殊类?

现在,我的所有类中都有 Get、AddOrUpdate 和 Delete 方法,它们与我的数据库来回通信。我已经了解到我不能 MarshalByRefObject & [Serializable] 到所有这些类,否则我会遇到问题。所以,这就是为什么我认为我需要创建单独的类来执行“管理”(例如 Get、AddOrUpdate、Delete),而不是拥有属性定义和方法调用。

我认为需要做的事情的一个例子。

[Serializable]
    public class Users {
        #region Properties...
        private int _userID;
        private string _displayName;
        private string _userName;
        private string _firstName;
        private string _lastName;
        private string _LogOnPassword;
        private List<Users> _Associates = new List<Users>();
        private AuthenticationLevel _authorizationLevel;
        private string _userSettingsXML;
        private string _active;
        private string _signature;
        private int _PhoneExtension;
        private int _Index;
        private List<UserAssignedRoles> _Roles = new List<UserAssignedRoles>();

然后要实际创建一个列表,我将有一个单独的类,称为 UserManagement。

public class UserManagement : MarshalByRefObject { 
    public List<Users> GetUsers() { 

    }
}

非常感谢任何建议!

【问题讨论】:

  • 参见msdn.microsoft.com/en-us/library/5dxse167(v=vs.80).aspx 和alexthissen.nl/blogs/main/archive/2007/12/23/… 如果需要,您可以将所有对象作为 MarshalByRefObject 传递,只要您有足够的权限。所有其他都取决于您的设计决定。
  • Remoting 的最佳实践通常是放弃它并继续使用 WCF。也许您仅限于 Fx2 左右,但请务必调查选项。
  • Henk,谢谢,我想我肯定会走 WCF 路线。看起来这将是一种比远程处理更简单的方法,并且更优雅,这正是我正在寻找的。​​span>

标签: c# remoting serializable marshalbyrefobject


【解决方案1】:

远程处理可能是一个不错的方法,但是由于您没有提供很多关于为什么要远程处理的上下文,所以让我提供一个额外的建议。您可能需要考虑创建 Web 服务以跨架构层进行通信。 Windows Communication Foundation (WCF) 是一项成熟的技术,它使pretty straight-forward 用于简单的通信。您可能还想了解面向服务的架构 (SOA),可能从 four SOA tenets 开始。

使用 WCF 重用当前类应该不会有任何问题。服务只会为您提供更好的结构,而且 WCF 技能比 .NET Remoting 技能更常见(对于接下来需要管理此代码的人)。

祝你好运! -比尔

【讨论】:

  • 太棒了,谢谢!是的,我为缺乏信息道歉。我的应用程序基本上采用了新要求的功能。到目前为止,它主要是由数据库驱动的,并且不需要任何内置的服务器客户端基础设施。我学习了一点 .NET 远程处理,但我一直很好奇那里还有什么。当我们说话时,我实际上正在研究 WCF。非常感谢您的链接。
  • 比尔,我有一个问题。我阅读了您提供的文章,并感谢您,这些是我需要阅读的关键材料。我继续使用我的 dll 创建了一个测试服务器和客户端,它按照教程很容易工作。我注意到我必须生成代理,然后将该文件合并到我的客户端中。我不喜欢的是我的客户端代码没有遵循我的类设计的优雅。所以我的问题是,我可以在客户端代码中保留我的类设计,例如 MyDatabase.Orders、MyDatabase.Users 等,还是只是需要做出牺牲?
  • 您不需要使用代理,尽管这种简化通常很方便。如果您想“自己动手”,请查看 codereview.stackexchange.com 上的这篇文章以及一些示例代码:codereview.stackexchange.com/questions/7793/…
猜你喜欢
  • 1970-01-01
  • 2021-06-24
  • 2010-10-16
  • 1970-01-01
  • 2013-08-25
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多