.net Web服务还是DLL?

.net Web服务还是DLL?,.net,web-services,architecture,.net,Web Services,Architecture,我正在创建一个应用程序,该应用程序既需要由托管在内部网络上的web前端访问,也需要作为计划任务运行。在我们的内部系统之外,什么都不需要访问,一旦应用程序启动并运行,我们在一段时间内不会设想任何变化 我最初的想法是创建一个DLL,封装大部分必要的功能,然后通过手动执行的Web窗体界面和作为自动(每日)计划任务运行的控制台应用程序调用它 另一个建议是为核心功能公开一个Web服务,但由于该应用程序永远不需要外部资源调用,我认为实现Web服务所需的额外努力可能不值得这么麻烦。DLL解决方案也应该大大加快

我正在创建一个应用程序,该应用程序既需要由托管在内部网络上的web前端访问,也需要作为计划任务运行。在我们的内部系统之外,什么都不需要访问,一旦应用程序启动并运行,我们在一段时间内不会设想任何变化

我最初的想法是创建一个DLL,封装大部分必要的功能,然后通过手动执行的Web窗体界面和作为自动(每日)计划任务运行的控制台应用程序调用它

另一个建议是为核心功能公开一个Web服务,但由于该应用程序永远不需要外部资源调用,我认为实现Web服务所需的额外努力可能不值得这么麻烦。DLL解决方案也应该大大加快(?)

我的问题是你会选择哪条路线?有什么优点/缺点我没有提到吗?有明显的遗漏吗


免责声明:我是.Net新手,但由于我们的一名开发人员卷入了一起严重事故,我被要求承担责任。

你说得对,web服务在经验上很麻烦,速度也慢得多。 我建议-使用PONO(普通的旧.net对象),但使用接口。看看Spring.NETFramework——它可以将这个对象导出为任何类型的(web)服务,所以您不需要进行填充。 在客户端,您还可以使用spring进行依赖项注入,并决定是否需要进程内DLL或web服务实现,只需更改配置文件中的值即可。
此外,Spring还集成了Quartz调度程序,您可能也希望对其进行研究。

就我个人而言,我建议使用DLL。它将是快速和简单的

使用web服务时,您需要考虑您的网络、防火墙、性能等。由于您无法从客户端进入web服务,因此调试也变得更加困难,您必须在调用的两侧设置断点

web服务的另一个问题是,您需要更加健壮地处理故障。使用DLL时,您知道对方法的调用会成功,但使用web服务时,您需要做好准备,以防在调用时失败或超时


最后,如果您以后发现需要一个web服务,您应该能够相当容易地将DLL转换为web服务,只需很少的改装。

就我个人而言,我会照您说的做;将我的逻辑放入DLL。然后使用应用程序、Web服务中的DLL,以及他们将来请求的任何尚未确定的接口。

现在不需要创建Web服务。您只需在服务器上维护其他IIS服务。如果您稍后创建一些需要该DLL的接口,您可以简单地引用它。因此,没有必要做预防性的工作。

使用DLL是一种正确的方法,它更快,而且它提供了将来创建Web服务的自由,使用这些DLL(如果需要)比使用Web服务更安全。

我们确实需要更多信息。如果不知道你的具体需求是什么,很难回答。分层方法(dll/独立类)简单快速。分层方法(web服务)将使您拥有一个环境,并提供更多抽象。您可以在不更改客户端的情况下更改web服务背后的代码


但是为了评估这一点,我们需要知道你的项目是什么,这个dll会做什么。否则,您只会听到人们的偏好。

将逻辑封装到程序集中就足以满足您的解决方案,因为似乎什么都不会离开您域的边界,您的两个内部应用程序都将使用您设计的组件公开的功能


出于可维护性的考虑,您可以非常轻松地从URL加载此程序集,如果此组件需要包装到Web服务中,这当然是可能的,并且您的代码可以创建Web代理类,而代码更改最少。

我正在开发一个类似的应用程序。我采取的方法是将提取逻辑放在dll中。这是通过Web服务公开的。我发现web服务更简单,因为我不需要在客户机上删除接口或公开对象(我使用类封装数据)。然后我让web开发人员和winforms开发人员编写他们自己的表示层。虽然有优点和缺点(我不会详细讨论),但web服务更简单,因为我只有一个层。使用远程处理,我需要额外的接口或客户端库,这些接口或库必须安装在每个客户端上。这样,我只管理服务器端,而不同的GUI是独立的。我只是喜欢疯狂的耦合编码。 我们运行大量的windows服务,这些服务也使用Web服务。我们是一个信用卡组织,我们与许多系统进行交互。web服务提供了最大的灵活性


毕竟,考虑到您的需求,这归结为您自己的个人偏好。我想说的是,如果不考虑用最小的努力做出改变的能力,就不要选择1而不是另一个。我发现rad应用程序随着不断增加的新需求而快速变化。慢慢来,调整项目的范围和生命周期以及需求。然后发展你的优势。

哇。它们都共享一个DB?如果是这样,不,不,不。如果数据库没有共享,那么它肯定是DLL

正确的选择是Web服务。原因也很简单

1) 域模型和业务逻辑的一致性。假设将枚举存储在列中,然后添加一个枚举并部署到一个应用程序。现在它将中断其他两个应用程序

2) 易于部署。一次更改=一次部署。如果是dll,则一个更改=3个部署

3) 数据库事务和并发控制。阿洛