Answers:
就编写一个同时利用ASP.NET/MVC和WCF的应用程序而言,它并不是很好。WebAPI可能已经改善了问题,但是在我熟悉的一个项目中,在同一应用程序中使用WCF和MVC,他们最终维护了两组不同的模型来表示相同的概念-一个用于WCF代码,另一个用于MVC。码。您可以想象他们为在两个模型之间转换内容而必须编写的所有映射器-那里有许多本来可以避免的代码行。
发生这种情况的部分原因是WCF请求和响应对象应使用[DataContract]进行注释,并使用[DataMember]对其属性进行注释,而MVC则不需要这样做。另一方面,惯用的MVC将需要ViewModel,它们的目标与WCF DataContracts不同。当然,与WCF和MVC冲突相比,使用两组完整的域对象可能与Conway定律有更多关系,但值得指出的是,就输出和输入而言,WCF和MVC具有不同的目标和要求。
就个人而言,我倾向于开发一个简单但功能强大的面向服务的后端API,特别是在您可能需要多个客户端的情况下。我认为,出色的JavaScript MVVM和micro-MVC框架的出现使之成为一种自然的选择,因为使用BackboneJS,KnockoutJS等编写应用程序代码可提供功能强大的开发环境。然后,您可以在选择的微型MVC中使用后端来构建Web应用程序,也可以在移动客户端上使用后端,并且您的合作伙伴也可以远程使用相同的API。
建议
WebAPI或Service Stack可能都是构建后端API的理想选择。我建议使用Service Stack,因为最近几个月来我一直在使用它,并且发现它可以替代WCF。我目前正在博客上编写有关服务堆栈的系列教程。
小组维护服务堆栈使用该框架发布了一个示例应用程序,用于开发类似于clone的StackOverflow,它显示了我认为特别引人注目的开发模式。它涉及一个简单的,基于模型的服务后端,您可以想象它被MVC网站,移动应用程序或几乎所有其他内容所消耗。ServiceStack的设计目标显然鼓励一种模式,该模式应减少客户端和服务器之间的耦合。这样做的想法是避免使用诸如GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm)
减少类方法之类的调用的健谈API 。您可能在服务堆栈中实现相同的操作,如下所示:
[Route("/customers", "GET"]
[Route("/customers/search/{SearchTerm}", "GET"]
[Route("/customers/region/{Region}", "GET"]
[Route("/customers/region/{Region}/search/{SearchTerm}", "GET"]
public class Customers
{
public int? RegionId { get; set; }
public string SearchTerm { get; set; }
}
public class CustomersService : Service
{
public object Get(Customers request) {
// handle request
return new CustomersResponse();
}
}
的好处,我的眼睛,是不是有出过很多很多不同的方法你的业务逻辑蔓延GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm)
,GetCustomersInRegion(int regionId)
,GetCustomersWithSearchTerm(string searchTerm)
,GetCustomers()
,这一切都在一个地方。这应该导致更易于维护的代码。
巧合的是,Stack Exchange雇用了原始的Service Stack 作者。他继续积极致力于Service Stack项目。
我特别喜欢某些事情的消息队列-尽管WCF允许这样做,但WebAPI不允许。ServiceStack确实允许通过MQ调用相同的Web服务。有关更多信息,请参见Redis MQ主机,网址为:github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis
@tzerb已正确回答了IMO,但我想扩展该答案。您正在寻找的ASP.NET Web API目前处于测试阶段,并且是一个OSS项目。
产品的简短描述如下(从ASP.NET Web API页中引用):
ASP.NET Web API是一个框架,可轻松构建可连接到包括浏览器和移动设备在内的广泛客户端的HTTP服务。ASP.NET Web API是在.NET Framework上构建RESTful应用程序的理想平台。
至于您可能用来使用Web API的客户端应用程序,当然不必一定是ASP.NET应用程序。您可以使用JavaScript通过静态HTML页面使用您的API。您可以使用一些有用的JavaScript库(例如jQuery)轻松完成此操作。
另一方面,您当然可以在任何ASP.NET应用程序的服务器站点上使用您的API。Web API项目还引入了一个名为HttpClient的新HTTP .NET客户端API,可以轻松使用HTTP服务。
通常,这里有一些很好的资源供您入门:
请记住,该项目仍处于测试阶段。我建议您关注Henrik F Nielsen博客,他在博客中发布有关项目的最新未发布更新的信息。您可以在ASP.NET Web Stack项目中找到该项目的源代码和开发流程。
我认为当前的指南是使用MVC Web API代替WCF for REST。 http://stephenwalther.com/blog/archive/2012/03/05/introduction-to-the-asp-net-web-api.aspx
开发模型非常接近,您绕过了WCF有时令人讨厌的配置。