使用Windows和Web界面编写企业应用程序的最佳方法?

时间:2011-02-04 19:52:49

标签: .net wcf web-services model-view-controller

我正在研究基于最新.NET和SQL Server技术的大型企业应用程序的体系结构。该应用程序将由公众,成员,员工和经理使用。

过去,我们使用RemoteApp / RemoteDesktop与服务器上运行的本地Windows窗体应用程序进行通信。简单但笨重。

  • 应用程序的某些方面需要作为Web应用程序呈现。
  • 应用程序的某些方面需要作为Windows窗体应用程序呈现。

需要将Windows应用程序分发给地理位置不同的受众(分支经理和员工)。

以下是windows界面的目标:

  1. “瘦客户端”,其行为类似于Web浏览器(仅限用户界面)
  2. 要在服务器上完成的所有处理
  3. 使用与web-app相同的代码库 - 只是不同的UI
  4. 直接发展(易于维护和成长)
  5. 有哪些最佳方法?

    (我花了相当多的时间来研究.NET Remoting,然后是WCF,但我没有经验,我希望你能带来。)

    谢谢!

1 个答案:

答案 0 :(得分:2)

我的应用程序在工作中具有Web界面和WCF服务界面。另一个应用程序(WinForms one)使用WCF服务提供与Web应用程序相同的功能,仅在WinForms应用程序正在执行的操作的上下文中。关于它的好处是实际功能在业务层,Web应用程序和WCF服务都只是呈现不同的UI和访问方法。

从您所描述的内容来看,类似的东西会起作用。真正的关键是确保ASPX页面中嵌入尽可能少的业务逻辑。不管怎样,你将不得不为它的WCF方面重新创建。

因此,您希望创建一组可以执行应用程序实际功能的业务逻辑类。然后,您的网页包含演示逻辑。如果以这种方式进行设置,那么创建一个向调用程序公开相同业务逻辑的WCF服务是相当简单的。这部分是整个事情的真正关键。您只需要在一个地方使用逻辑,因此更改它会同时为两种类型的调用者更改它。

如果您正在使用其中一个Web服务WCF绑定,您将能够将服务文件粘贴到Web应用程序中并将它们一起托管。如果您正在使用诸如活动目录身份验证之类的东西,您将能够同时利用它进行两种类型的访问(因为这是一个内部WCF服务而不是面向Internet的公共服务,这将工作正常)。

我首先从它的Web应用程序开始,一旦它完成了你想要的,你可以在之后添加WCF服务,以使项目保持在可管理的范围内。

至于WCF与远程处理,在这种情况下,我赞成WCF。它与网络应用程序配对非常好。

编辑:

1)接口 - 无论如何,您都需要.svc文件中的类来实现服务调用。需要一个接口作为某些类型服务的服务契约(basicHTTPBinding,它基于SOAP),但不适用于其他服务(webHTTPBinding,它是基于REST的)。不管怎么说,我可能会编写一个界面,它可以让你在不改变服务合同的情况下改变服务实现,这是客户需要保持一致的。

2)从Web应用程序调用服务当然是可能的,但它会为Web应用程序添加额外的工作层。对于HTTP服务,它还意味着您的服务将XML序列化所有内容,然后您的Web应用程序将需要立即反序列化它。 XML序列化带来了显着的性能影响。我会避免这种方法,因为Web应用程序可以更有效地数据绑定到业务层返回的业务对象(并且WCF将自动为服务的客户端对其进行XML序列化)。如果您的网络应用需要在不同的应用中调用其他服务,那将是一回事,但在这种情况下,它不是可行的方式。

3)如果它是面向公众的,那么你如何对其进行身份验证会发生变化。对于内部资源,您可以让IIS使用Active Directory处理身份验证。如果您有Internet客户端,它们可能不在Active Directory中,您需要使用其他方法。 (HTTP Basic和Digest auth应该仍然没问题,或者你可以做一些事情,例如将用户名/密码作为参数添加到需要身份验证的方法中。确保在服务上使用SSL!)