分布式应用程序(WCF / Remoting / web servervices)与Web应用程序

时间:2009-12-24 07:29:09

标签: c# .net wcf distributed-computing .net-remoting

我正在制作一个中型标准LOB应用程序。目前它是一个Web应用程序,但我正在制定一个提议,将其改造为桌面远程应用程序。我的意思是数据库和应用程序服务器将托管在远程位置。客户端应用程序将通过Internet(WCF / Webservices / Remoting)与服务器通信。

我的问题是:我将这个从网络平台转移的唯一原因是由于网络的限制(我不想做AJAX或Java脚本来最小化这些约束,所以请不要JS / AJAX推荐) 。我已经制作了传统的桌面应用程序并且它们非常快,但我从未制作过远程或分布式应用程序。我不确定天气,应用程序的速度会比网络更快。

据我了解,远程桌面应用程序会更快。首先,不会有任何后援,(我非常讨厌他们)。这些数据显然是通过互联网传播的,所以在这方面,为了纯粹的速度和动力,转移到远程桌面会更好吗?

任何正确方向的帮助都会很棒。非常感谢。

Zeeshan

3 个答案:

答案 0 :(得分:1)

您对术语有些模糊 - 您是否想要在用户计算机上运行的客户端应用程序,或者您是否希望在服务器上运行的应用程序以及用户通过远程桌面(RDP)进行连接?

如果您正在谈论通过WCF等与服务器通信的客户端应用程序,那么它将比标准Web应用程序更快,尽管它仍然比本机桌面应用程序慢。它将比Web应用程序更快,不仅仅是因为缺少回发,还因为您将通过网络发送纯数据,而不是大量的HTML / Javascript与您的数据相结合。使用客户端应用程序,您有几个选项,因此请仔细考虑它们 - 您想要Silverlight,WPF还是原生WinForms应用程序?每个人都有积极的和消极的。

如果您正在讨论在服务器上运行客户端应用程序然后用户通过RDP访问,那么您还需要考虑其他因素。对于任何两个以上的并发用户,您需要考虑购买CAL,以便用户可以连接到服务器。此时,您还应考虑是否应该运行终端服务器或Citrix类型设置而不是使用远程桌面。

修改

在WAN(互联网)上使用WCF时,您一定要考虑如何保护它。 WCF使得保护频道变得微不足道,但你需要考虑如何进行身份验证 - 有几种不同的方式,但你可以轻松地自己谷歌那些东西。由于用户的资源或技能有限,您选择的方法很重要。

至于你写的是什么,你不能与Winforms争论,如果这是你的经验。就个人而言,我永远不会再使用ASP.NET/Ajax/etc作为Web类型的应用程序,它将一直是WPF或Silverlight(我只会将ASP.NET用于简单的网站)。你可以使用Visual Studio的快速(免费)版本来编写它,你不需要Expression(它只是一个很好的,并且更多的是针对设计方而不是实际的编码方)。部署应用程序并不困难 - Silverlight或WPF xbap通过Web提供,用户不得做任何事情(除了简单安装Silverlight插件或为WPF安装正确的.Net框架 - check this link) 。 Winforms或独立的WPF需要稍微多一点的工作,但是你可以通过编写一个好的安装程序来避免大多数问题。

无论您选择哪种,请确保您没有估计开发时间(因为您将有一点学习曲线),并确保您有足够的时间进行测试 - 特别是它的安全方面:)

答案 1 :(得分:1)

我认为桌面客户端相对于Web应用程序的最大优势是UI设计的自由,并且您不必担心客户端环境中的任何不一致,但如果您使用运行的客户端则不会出现问题Silverlight的。

就个人而言,我不喜欢需要大量用户互动的网络应用程序,其中有一些是很高兴使用的,但我认为很容易以错误的方式做到这一点,并最终有一个越野车或没有那么敏感的应用程序(可能是因为浏览器不兼容,我在我的计算机上安装了IE,Firefox和Chrome,我在一些网站上使用一个,因为它们运行速度更快,其他网站运行速度更快,因为网页只显示正确在他们)。虽然这可能不是银光客户的问题。

在网络速度的情况下,即使使用二进制序列化进行远程连接也可能会产生相当多的开销。例如,它与数据一起写入完整的类名,库名和它们的版本,因此即使对于少量数据它也会变得非常大和慢(尽管它应该仍然小于HTTP)。它也有与HTTP不可靠连接相同的问题,因为它使用类似的协议。对于一个项目,我们必须为某些对象编写自定义序列化器,因为仅二进制序列化就产生了200K,但是我们为这些对象生成的自定义序列化器产生了50K。然后我们最终编写了自己的网络协议,因为运行时附带的那个通常会停留在不可靠的无线网络上,并且远程控制不会对它创建的套接字进行任何控制(这在封装方面是有意义的,但你可以关闭它并迫使它打开一个新的。)

(我假设你在询问远程桌面与网络应用程序的远程处理,而不是远程桌面与网络应用程序,因为你有关回发的说明,你无法通过远程桌面会话来避免它)

仅为纯粹的速度重写应用程序?不,因为可能用户不会看到响应时间的差异。

答案 2 :(得分:0)

我遇到过类似的情况,尽管是从Winforms LOB应用程序开始的。

这是我们在WinForms中发现的......

  • 在您的发布周期中部署到所有客户端计算机将会更加困难。
  • WinForms无法轻松在其他操作系统上运行。 (单声道除外)
  • WCF端点可能变得复杂,您需要管理应用程序的发布/版本的端点。
  • 认证,授权和安全性可能很难实现!

这就是为什么你应该坚持使用HTML网页应用程序。

  • 它将更容易部署,因为您只需要将一组DLL复制到bin文件夹中。可以从持续集成或登台服务器编写脚本。
  • 使用SSL证书可以轻松实现安全性。
  • Silverlight / Flash应该填补HTML遗漏的空白。

微软还将.net 3.5中的连接系统组合在一起,他们现在将其称为WCF(ASMX / Remoting / etc ......)。它有4-5周的学习曲线。