网站的WCF设计模式

时间:2013-07-11 09:39:39

标签: c# wcf design-patterns

我目前正在进行第一次正确的技术设计,以寻求替代我们现有解决方案的解决方案。目前我们有各种各样的网站名义上做同样的事情。然而,其中3或4个使用经典的ASP,并且从未更新过,据我所知,他们返回的数据最多也是有缺陷的。

大多数应用程序使用的应用程序是SharePoint Web部件,使用ASP.net(3.5)根据访问它的位置动态创建多个输入框和组合框。所有配置都存储在SharePoint列表中(包括用于数据库访问的用户名和密码)。当用户单击搜索按钮时,它会调用存储过程,该过程处理并返回数据。这个存储过程是重写的另一个主要原因,因为它已被许多开发人员多年开发,并且没有人评论他们正在做什么 - 它可能需要多达30秒来返回几百条记录和大量的时间它甚至没有返回我期望的叹息

所以,我终于得到了重写,我已经想出了一个我觉得可行的解决方案。然而,当我写下来时,我不相信这是正确的方式,所以我会感谢任何有更多知识的人,而不是我曾经给过的。该应用程序将包含以下内容:

网站

该网站将非常基本 - 只需根据他们访问的网址创建输入框,并允许他们提交请求。

当用户点击提交按钮时,将使用ChannelFactory模式向我的WCF层发出请求。

然后处理响应并且用户显示他们请求的数据或错误。

通讯(WCF层)

我们有两个要求,一个用于互联网,一个用于内联网,因此我决定使用wsHttp进行互联网使用传输级安全性,另一个可能使用另一个协议(也许是net-tcp绑定?)

这个层实际上只作为外部世界和数据之间的缓冲区,所以它并没有真正做太多。它只是调用下一个数据层中的一个或多个方法

当响应来自数据层时,它将是数据(好)或错误(坏)。 WCF服务将创建DataContract对象或FaultContract对象并将其返回到网站。

数据层

对于数据层,我使用LINQ to SQL建立与数据库的连接并处理来自WCF的请求。我打算将数据层放在数据库服务器上,因此它将被创建为自己的类库。

在数据层中,代码将尝试处理请求并将对象返回到WCF层。

基本上就是这样。我正在努力使这个系统尽可能安全,并使其更易于维护,因此我们不需要在每次进行微小更改时重新安装webpart。我还包括了WCF层,因此我们可以使它更具弹性,因为它是一个关键业务系统。

我很感激有关我出错的地方或一般性意见的建议:)

1 个答案:

答案 0 :(得分:0)

这是一个非常大的话题,但我会说几句评论:

  1. 将ASP.NET MVC用于网站
  2. 分离您的疑虑并使用Unity等IoC模块化问题
  3. 尝试使用Framework
  4. 中提供的内置AuthenticationService功能
  5. 在网站中接口客户端代理,以便您可以进行热插拔和模拟测试。
  6. 使用实体框架代替LINQ to SQL(这里只是个人偏好)
  7. 确保您的Intranet WCF服务使用netTcp之类的内容并使用Windows身份验证
  8. 尝试将FormsAuthentication与您的公共WCF服务一起使用,以减轻您的安全需求负担。您可能希望放入自定义消息拦截器来设置线程的Principal。
  9. 提供所有消息类型的接口变体IOrder,ICustomer,IWhatever,并保持您的界限非常谨慎,以实现最大程度的模块化。
  10. 无论如何,那只是我的10便士而且上面一直对我有用!