设计决策 - WCF服务或共享类库(DLL)

时间:2009-10-09 22:29:48

标签: wcf dll

我目前正在设计一个消息队列系统,它将被各种应用程序使用,并且很难决定是使用WCF来提供服务还是使用共享类库(DLL)并使用客户端。

有关其他信息:

•队列存储在SQL数据库中。

•我们希望使用此消息队列系统有大约3-7个不同的应用程序/客户端。

•客户端/应用程序可能会也可能不会在一台计算机上运行。

•我们预计每天都会排出大量的邮件(每天大约1000-10000(估计btw))

•有点“关键任务” - 如果此服务不可用,多个客户端/应用程序无法正常工作。

•一切都在企业网络内运行 - 无需访问互联网。

我已经给出了一些关于每个决定的利弊:

WCF服务

优点:

•无需更新客户端即可更新队列系统中的逻辑

•可扩展性的空间 - 但很可能不会成为问题。

缺点:

•更难诊断/调试

•部署

时需要付出更多努力

•如果服务中断,队列系统不可用(除非我们是集群/服务器场)

共享类库(DLL)

优点:

•更易于调试

•更容易的开发工作

•只需确保数据库可用 - 不依赖于其他服务/机器。

缺点:

•当我们对DLL进行更新时,部署令人头疼 - 我们可能忘记更新依赖于DLL的所有应用程序。

如果有人可以为解决方案提供更多参数 - 这会有所帮助!如果你对你认为最好的方向有意见,请告诉我们!我将非常感谢任何有助于我做出决定的意见。

感谢您的时间,

阿德里安

1 个答案:

答案 0 :(得分:3)

你可以做到这两点:

  • 实现一个类库,该类封装了您希望公开的所有功能。希望控制级别的消费者可以直接引用该库。
  • 开发一个仅作为类库的远程Facade的WCF服务。它只会将类库公开并转换为DTO /消息,并且本身不包含任何逻辑。

换句话说,类库是您的域模型,该服务只是该模型前面的瘦门面。这就是在任何情况下都应该开发任何WCF服务的方式。


那就是说,我必须选择其中一个,我会尝试将自己的想法添加到你的(我认为最合适的)。

您忘记了WCF的一个缺点是它确实增加了一些处理开销,因为它必须序列化和反序列化消息。

即便如此,选择最佳模型不仅仅是计算每个pro / con部分中的子弹数量,因为每个子弹的重量都不同。

在不知道您的具体情况和要求的情况下,我仍然会认为与直接使用类库相关的部署/版本控制问题是针对该策略的一个非常有力的论据。

只要合同保持稳定,Web服务界面将允许您彼此独立地改变服务和每个客户端。这也可以通过类库实现,但更难。

可互操作的Web服务接口还使您能够更好地发展和响应新的业务机会,因为客户端不受.NET应用程序的限制。您今天可能只有.NET应用程序,但是您确定它将永远保持这种状态吗?

另一方面,如果您决定使用类库路由,请确保让每个客户端都使用抽象基类,因为这将为您提供最灵活的选项,即在不破坏现有客户端的情况下更改实现。< / p>

鉴于您提供的信息,我不认为这里有明确的赢家。尽管增加了复杂性,我还是略微倾向于WCF,因为我认为它提供的灵活性为您提供了更好的选择来回应不可预见的变化。