【问题标题】:Is remoting a suitable solution for this scenario?远程处理是否适合这种情况?
【发布时间】:2013-05-26 23:28:37
【问题描述】:

我需要一个解决方案,其中包含配置信息的对象实例托管在 Windows 服务中,并且许多(最多 1000 个)或更多同时客户端与此对象交互。

客户端将在启动时访问该对象,并在客户端执行其目的时在操作期间定期访问该对象。 客户端很少会更新配置。 配置更改发生时必须在所有客户端上传达/反映(无轮询)。

远程处理是一个合适的解决方案吗?我希望避免编写完整的服务器和客户端系统、处理套接字等。

【问题讨论】:

  • 您应该简单地使用 WCF。使用一种高性能绑定,例如基于 TCP/IP 的二进制。

标签: c# client-server remoting


【解决方案1】:

是的,remoting 是一个合适的解决方案,但是如果您使用的是 .NET 3.5 或更高版本,您可以考虑使用超越 remoting 的 WCF,并使用 nettcp 绑定。

【讨论】:

  • 我将使用 .NET 4.0,所以我会阅读 WCF,谢谢您的回答。我相信这是最合适的解决方案。
【解决方案2】:

您可以使用 SQL 数据库,如 SQL Server 或 MySQL,并添加薄层服务器应用程序(例如,提供 XML/JSON 数据的简单 ASP.net 应用程序)和持续查询服务器的脚本/应用程序。

【讨论】:

  • 谢谢你,我应该指出我想尽可能避免使用数据库解决方案。信息量非常少,如果我能侥幸成功,我不想添加 SQL 作为必要条件。
  • 我明白,即使对于有许多客户端的小型项目,SQL(或某些 NoSQL)数据库也可以为您提供开箱即用的并行查询的原子同步,这很好。
【解决方案3】:

WCF 和 SQL 数据库都是值得考虑的解决方案,但恕我直言,您所描述的与remote procedure calling (RPC) 的关系更为密切。 RPC 允许您在服务器上创建单个对象,客户端可以与该对象进行交互,就好像它是本地对象一样(因此完全避免了处理套接字的需要)。或者,每个客户端也可以创建自己唯一的服务器对象来与之交互。

RPC 的完整实现可以在网络库networkcomms.net 中找到。以下代码 sn-p 取自 RPC 示例。

服务器端:

//Register a single object server side called "Calculator"
RemoteProcedureCalls.Server.RegisterInstanceForPublicRemoteCall<MathClass, IMath>(new MathClass(), "Calculator");

客户端:

//Get a reference to the remote object named "Calculator"
IMath calc = RemoteProcedureCalls.Client.CreateProxyToPublicNamedInstance<IMath>(connection, "Calculator", out instanceId);
//We can now use the calculator object as if it were local
//The following WriteLine outputs '12' where the calculation was performed on the server
Console.WriteLine(calc.Multiply(4, 3));

免责声明:我是这个库的开发人员。

【讨论】:

  • 非常感谢您的详细解答。您的库看起来确实令人印象深刻,并且 RPC 功能肯定可以满足我的需求,但是,我不能保证我将来能够遵守产品的 GPL 许可,因此我将首先研究基于 WCF 的解决方案。不过谢谢。
  • @Ashigore - 如果您到了那个地步,也可以使用非 GPL 许可证,networkcomms.net/licensing
  • 我没有看到,成本似乎也很合理,我会认真考虑将其用作解决方案。谢谢。
  • 虽然 OP 描述了 RPC,但我认为没有理由相信这是他需要
猜你喜欢
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 2011-12-15
  • 2012-01-21
  • 1970-01-01
  • 2016-01-06
相关资源
最近更新 更多