2015-09-14 78 views
1

我们正在开发一个mvc网络应用程序,用户界面将会很快响应,所以看不到任何将要使用服务的本地应用程序所需的Web服务的未来需求。但是,如果我们想在客户端使用Angular js,那么是的,这是必需的。如果不需要,Web服务是否会创建开销?

现在的问题是:

请问性能的情况下,我们越使用项目库(服务库不是web API),而不是使用的Web API创建REST服务?或者如果我们使用休息服务不会有太大的区别?

我相信包括服务项目库的参考将是最好的选择,如果不需要休息服务。当来自客户端的请求转到服务器时,它不需要另外的http请求来调用其他服务。

+0

许多优秀的问题都会根据专家的经验产生一定程度的意见,但对这个问题的回答往往基于意见而非事实,参考或具体专业知识。 – Epodax

+0

正确,你有没有遇到这种情况?或者您是否有正确答案的任何事实/参考? –

+0

你在这里有什么问题?您正在构建将直接使用dll的原生应用程序,并且您想知道您是否仍需要apis? –

回答

1

这两个世界的最好的将包括服务项目库的参考,设计它们的方式,你可以有一个非常薄的层 - 一个ApiController - 只处理WebService安全性,如果有的话,逻辑。

如果你做得对,控制器应该除了调用你的服务类之外几乎没有代码。

其他优点:您可以实现一些控制器,将您的服务作为REST服务公开,只是为了证明您获得了它的要点并确保您的架构能够正常工作,然后在以后的日子里公开所有其他服务作为您需要的RESTful API,当您切换到AngularJS时。

+0

如果您针对服务类构建代码,这可能会很麻烦。可能会出现序列化问题(循环引用,不可序列化的类),直到您尝试从Web服务提供它们时才会注意到这些问题。 – CodeCaster

+0

我不确定在这种情况下循环引用是如何发生的,但是你有一个关于这样一个事实的观点:明智地选择在这些服务返回的对象中公开的类型,否则,需要更多的代码来确保它们可以序列化。 –

+1

圆形引用很容易创建,例如通过返回'Order'和'List '属性,其中'OrderLine'有一个引用返回'Order'。这对于程序集引用可以很好地工作,但不能通过没有更改的序列化。 – CodeCaster

1

Web服务的开销与调用次数成正比。通过拨打100000次无操作服务来衡量它。您可能每个CPU内核每秒钟可以获得1000-5000次呼叫。

此度量不包括网络延迟。

取决于您的应用程序的多么有趣,perf的成本可能接近零或破坏性。

添加Web服务层时,最大的担心通常是生产力成本。这很重要。您不能再在图层之间共享对象并依赖对象标识。一切都被复制。例如,客户端没有使用ORM。

Web服务不是你轻易添加的东西。也许你可以将你的代码构建为一个稍后可以放入Web服务的库。但是,这很难得益于国家不能共享的根本问题。

相关问题