var ordersService = base.ResolveService<OrdersService>();
var ordersResponse = (OrdersResponse)ordersService.Get(
new Orders { CustomerId = customer.Id });
返回普通的C#对象
在大多数情况下,ServiceStack将按预期序列化大多数C#对象 - 这是可能的返回类型列表(from this answer):
try {
var client = new JsonServiceClient(BaseUri);
var response = client.Send<UserResponse>(new User());
} catch (WebServiceException webEx) {
/*
webEx.StatusCode = 400
webEx.ErrorCode = ArgumentNullException
webEx.Message = Value cannot be null. Parameter name: Name
webEx.StackTrace = (your Server Exception StackTrace - if DebugMode is enabled)
webEx.ResponseDto = (your populated Response DTO)
webEx.ResponseStatus = (your populated Response Status DTO)
webEx.GetFieldErrors() = (individual errors for each field if any)
*/
}
4 回答
作为ServiceStack的客户,ServiceStack的专业人员对我来说最重要 .
https://github.com/ServiceStack/Issues/issues/606
所以 . 发现错误,发现错误,错误修复 . 同一天 . 非凡的支持!
需要考虑一个新的主要区别 - ServiceStack is no longer free to use as of v4. 由于SS专家有一个非常确定的答案我想为Web API抛出一些
Web API
Pro's :
免费在您的项目中使用(前提是您拥有允许商业用途的VS许可证)
可从Microsoft和整个网络获得非常高级别的免费支持,包括StackOverflow.com上的免费支持 .
快速集成其他Microsoft技术堆栈,如ASP.NET MVC,这在Microsoft商店中非常流行
内置支持Microsoft堆栈中的RESTful身份验证和授权
Con's :
Ancillary Benefits
(请随时在下面留下评论,添加为什么Web API有好处或有我可以添加的优点/缺点)
它们具有非常相似的用例,作为ServiceStack project的主要维护者,我对ServiceStack的优势和many natural benefits of its message-based design有很好的了解 .
自2008年以来,ServiceStack一直作为OSS运行的项目,其目标是促进无摩擦远程服务的正确设计和实施 .
简约优雅的设计
在追求极致简约的过程中,它围绕a simple and elegant core构建 - 其大部分功能自然地与 your models 绑定,而不是您的控制器 - 这就是MVA,WebApi所做的(以及Microsoft已经生成的所有其他Web服务框架) .
采用基于消息的设计为远程服务提供了一种卓越的方法,因为它们可以促进更具可扩展性和更少脆弱的服务,简化访问和调用模式,以及contain many other natural benefits you get for free .
作为核心任务,我们在每个阶段都要对抗复杂性,旨在保持隐形和非侵入式API,并避免引入任何当前.NET或Web服务开发人员尚不熟悉的新概念或人工构造 .
作为示例,您的
IService<T>
服务实现只是具有自动连线依赖性的标准C#类 . 精简且轻量级的包装器用于围绕核心运行时IHttpRequest和IHttpResponse类型提供一致且统一的API . 它们还允许访问底层ASP.NET或HttpListener 's Request and Response classes so you'在使用ServiceStack时永远不会受到限制 .与WCF和WebApi形成对比
以下是ServiceStack and WCF promote对比API样式的简要概述 . WebApi与WCF的不同之处在于它鼓励REST-ful API设计 . 至于2之间的例子,这是我用ServiceStack and WebApi编写的相同服务的唯一已知示例 .
Best Practices远程服务
ServiceStack主要关注简单性,性能以及促进Web /远程服务最佳实践,其中包括尽可能采用Martin Fowlers远程服务设计模式作为惯用的C#:
Facade Pattern - 建议在跨进程边界进行通信时使用批量粗粒度接口 .
DTO pattern(MSDN) - 指示使用专用POCO生成Web服务响应的有线格式 .
Gateway Pattern(MSDN)用于封装客户端网关/ DTO模型和服务接口层之间的客户端和服务器通信 .
这些模式确保了关注点的清晰分离和无摩擦迭代开发体验 .
增强您的服务
ServiceStack Web服务的核心是以无依赖和自动连接的纯C#
IService<T>
接口为中心,使您可以完全自由地使用干净的POCO与您自己的请求和响应DTO定义Web服务 Contract - 将ServiceStack 's API practically invisible and non-invasive, i.e. it'渲染为无关紧要提取您的C#服务逻辑并在ServiceStack主机之外运行它 .这个要点是just 1 C# .cs class in ServiceStack所得到的一个很好的例子:
所有已注册格式的元数据页面
带有WSDL,XSD和C#客户端示例的链接
人性化的HTML报告视图
单个自包含的html页面快照(即没有外部引用) . 包括嵌入式JSON Web服务响应 - 允许以编程方式访问数据快照 .
内置Mini Profiler(优秀的MVC Mini Profiler端口)
包括Sql分析
JSON / JSONP,XML,JSV,CSV和SOAP endpoints
RestServiceBase和ServiceBase类旨在托管您的自定义C#逻辑,以便尽可能地重复使用,例如:它的DTO优先设计通常允许延迟和代理执行,同样的C#服务也可以在MQ主机中托管和执行,这是当您注册RedisMQ host RedisMQ host并通过
/asynconeway
endpoints 调用您的服务时发生的情况(即C#客户端中的client.SendOneWay()
)您还可以使用
base.ResolveService<T>()
方法轻松委派和创建组合服务,该方法返回所选服务的自动连接实例,如Nortwind CustomerDetails Service示例中所示:返回普通的C#对象
在大多数情况下,ServiceStack将按预期序列化大多数C#对象 - 这是可能的返回类型列表(from this answer):
任何DTO对象 - >序列化为Response ContentType
用于自定义HTTP响应的HttpResult,HttpError,CompressedResult(IHttpResult)
以下类型未转换并直接写入响应流:
字符串
流
IStreamWriter
byte [] - 使用application / octet-stream内容类型 .
this CORS example可以看到自定义HTTP标头支持的示例,您可以在其中全局或基于每个服务配置HTTP标头 .
HTML支持
在ServiceStack中有多个返回HTML的选项explained in detail here .
包括.NET的最快文本和二进制序列化程序
弹性和快速序列化器在API中最重要的是确保快速响应时间和版本化API,它不会破坏现有客户端,这就是为什么ServiceStack包含带有NuGet选项的fastest text serializers for .NET来启用@marcgravell的Protocol Buffers(.NET最快的二进制序列化器) ) .
ServiceStack的文本序列化程序非常有弹性,可以无错误地显示出来 .
无摩擦开发体验端到端
ServiceStack的固执性质允许端到端的快速,类型化,简洁的Web服务API,内置支持Sync/Async C#/.NET和Async Silverlight clients,无需任何代码:
同步C#示例
异步C#示例
因为它只返回纯JSON,所以它也可以与其他HTTP客户端一起使用,例如: JS client example using jQuery:
高度可测试
所有C#/ .NET ServiceClient共享相同的接口,使它们highly testable并可交换到可以让 same unit test 也作为XML, JSON, JSV, SOAP Integration Test的点 .
内置丰富验证和错误处理
为了提供免费且干净的开发体验,ServiceStack还包含typed validation and error handling内置,其中抛出C#异常或使用其内置的Fluent验证,可以在Web服务客户端上轻松访问客户端结构化的类型错误,例如:
为了在JavaScript中消除错误变得微不足道,您可以使用轻量级ss-validation.js JavaScript库通过一行代码将响应错误轻松绑定到HTML表单字段 . SocialBootstrapApi example project提供了一个很好的演示 .
与ASP.NET和MVC的丰富集成
ServiceStack MVC PowerPack重新编写并修复了ASP.NET和MVC的许多问题,并为其crippling Session和缓存XML加密的ASP.NET提供程序进行了替换,并提供了自己的ICacheClient和ISession API的清晰且无依赖的实现 .
ServiceStack还包括一个更新更清洁的authentication and autorization provider model,内置了许多不同的AuthProviders:
凭据 - 通过发布到/ auth / credentials服务来使用用户名/密码凭证进行身份验证
Basic Auth - 允许用户使用基本身份验证进行身份验证
Twitter OAuth - 允许用户注册和使用Twitter进行身份验证
Facebook OAuth - 允许用户注册和使用Facebook进行身份验证
Authentication模块完全是可选的,内置了干净的ICacheClient / ISession API和OrmLite,它允许您的Sessions存储在Memory,Redis或Memcached中,并且您的UserAuth信息保存在OrmLite支持的SQLServer,MySql,PostgreSQL,Sqlite的RDBMS中 . 以及Redis数据存储或InMemory(对开发/测试很有用) .
很棒的文档
ServiceStack有很好的文档记录,其中有关框架的大部分信息都托管在GitHub wiki上 . 框架其他部分的文档(例如Serializers,Redis,OrmLite)可以在servicestack.net/docs/找到
ServiceStack.Examples Project提供了所有ServiceStack现场演示和入门模板的源代码,而SocialBoostsrapApi project提供了一个很好的起点,可以使用基于Twitters Bootstrap模板的ServiceStack和MVC开发Backbone.js单页面应用程序 .
除了上述信息之外,近年来,信息宝库也大大扩展 .
无处不在
ServiceStack是一个.NET 3.5框架,可在ASP.NET和HttpListener主机上运行,可以托管在.NET或Mono上(琐事:www.servicestack.net由CentOS / Mono提供支持) . 这允许您的ServiceStack Web服务托管在以下任一位置:
Windows with .NET 3.5和4.0
IIS 5/6/7(使用IHttpHandler)
VS.NET WebDevServer
Console App或Windows GUI
Windows Service
Linux / OSX与Mono
Apache mod_mono
Nginx MonoFastCGI
XSP
控制台应用程序
使用开源开发模型开发
ServiceStack是开源开发模型的坚定信徒,它在开放时积极开发,自成立以来一直在liberal OSS licence(新BSD)下托管 . 截至今天,它已收到超过47 developers的捐款,目前它位于3rd most watched C# project on GitHub .
缺点
我认为最大的缺点是大多数其他OSS .NET项目都没有,因为它没有被Microsoft开发(甚至列为可用选项) . 这意味着在评估框架时,它很少成为首选 . 大多数采用者只会评估ServiceStack作为最后的手段,他们要么对WCF的强加摩擦和脆弱性或首选Microsoft Stack的性能感到沮丧 .
反馈和社区资源
ServiceStack得到了很好的响应,大多数人通过the positive sentiment in the mailing group对其进行了评估,提供了积极的反馈 . 截至今年,@ServiceStack twitter帐户一直在追踪mentions and feedback in its favorites .
Community Resources维基页面是一个了解更多关于ServiceStack的好地方,其中包含Blog Posts,Pod Casts,Presentations,Gists等链接 .
我对ServiceStack说的不多,但Web API有很多很棒的功能,目前版本为2 .
您可以使用Web API执行的一些操作:
OWIN应用程序中的自托管(即在任何地方运行) .
完全支持
async
和await
.良好的默认模板和大量的开源示例 .
使用了很棒的Json.Net JSON序列化程序 .
默认为Rest-ish(你必须自己做超媒体) .
等......