ServiceStack 项目实例 007

ServiceStack的官网提供了不少的项目案例下载,不过有的示例不能拿来即用,而且案例中还有用的是用VS2010开发的,SS的版本也比较旧,要调整一下才可以运行。

官方示例项目下载地址 https://github.com/ServiceStack/ServiceStack.Examples/tree/v3

其中包含如下示例项目(第一个目录是升级到VS2013的升级记录):

在《StarterTemplates》目录下有 一些项目起始模板

SS框架可以在.net3.5以上的VS开发环境下使用,也就是最低要求VS2008,示例项目中有少数是VS2010的,大部分是VS2012的。

这里说明一下《ServiceStack.Examples》这个项目,

方案中共包含7个项目,在Host目录下的三个项目

ServiceStack.Examples.Clients  Web版的客户端项目

ServiceStack.Examples.Host.Console 控制台版的服务端项目

ServiceStack.Examples.Host.Web  Web版的服务端项目

在Test目录下的两个项目

ServiceStack.Examples.Tests  基本功能测试

ServiceStack.Examples.Tests.Integration  整合方式测试(客户端和服务端整合使用)

ServiceStack.Examples.ServiceInterface  提供服务的项目(Service写在这个项目)

ServiceStack.Examples.ServiceModel  模型定义的项目(包含有路由)

这个项目在最后发布时仅需要发布Hosts目录下的文件即可,其他的项目基本是类库和测试项目。这个项目当中服务的调用使用了旧式的写法,比如

public class GreetService : IService<Greet>
{
public object Execute(Greet request)
{
return new GreetResponse { Result = "Hello " + request.Name };
}
}

其中的 GreetService : IService<Greet>  的建议新式写法为 GreetService : Service,Execute(Greet request) 的新式写法为 Get(Greet request) 。此外因为项目中使用了ServiceStack.Examples 和框架的 ServiceStack. 有冲突, 所以 GreetService : Service的继承不能直接写,需要写成  GreetService : : ServiceStack.ServiceInterface.Service。

注意其中的ServiceStack.Examples.ServiceModel 中的Types中实体类模型的定义:

    public class CustomerOrders
    {
        public CustomerOrders()
        {
            this.Orders = new List<Order>();
        }
        
        public Customer Customer { get; set; }
        public List<Order> Orders { get; set; }

CustomerOrders 表包含有Customer 和 Orders 两个表中外键关联方式的数据,但在3.x的示例中,并没有实现外键关联方式获取关联表的数据,而是通过在实体类中设置关联的内部类,在服务中获取数据时候组合多表数据实现,这是一种和NoSQL使用的方法和思路相一致的实现。

(在本示例中没有演示获取多表数据时候的组合合并过程,而是直接用一组样本数据示例,样本数据中已经设置好子类的数据,针对CustomerOrders 取得的数据是Customer 加上一组Order的List,组合好后直接返回给服务 ,详见《ServiceStack.Examples.ServiceInterface》 项目下的GetNorthwindCustomerOrdersService)

值得特别强调和说明是《ServiceStack.Examples.ServiceInterface》 项目下的GetUsersService.cs文件中根据一组ID或者用户名获取用户列表的服务实现:

程序代码: (修复后)

     public object Any(GetUsers request)
        {
            using (var dbConn = ConnectionFactory.OpenDbConnection())
            {
                var users = new List<User>();
                if (request.UserIds != null && request.UserIds.Count > 0)
                {
                    users.AddRange(dbConn.GetByIds<User>(request.UserIds));
                }
                if (request.UserNames != null && request.UserNames.Count > 0)
                {
                    users.AddRange(dbConn.Select<User>(
                        "UserName IN ({0})", request.UserNames.SqlInValues()));
                }
                return new GetUsersResponse { data = users };
            }
        }
时间: 2024-12-14 05:45:06

ServiceStack 项目实例 007的相关文章

ServiceStack 项目实例 008 ServiceStack.Examples - 2

先回归下SS的运行环境 我们接续前文,说明一下ServiceStack.Examples中的实用经典的代码(下面的代码是更新成新版写法后的): public object Any(GetUsers request)         {             using (var dbConn = ConnectionFactory.OpenDbConnection())             {                 var users = new List<User>();  

ServiceStack 项目实例 009 ServiceStack.Northwind - 1

这个示例是基于经典的微软官方北风数据库基础上实现的,北风的数据是一个网店管理和产品销售管理的案例.在这个案例中主要是演示了客户.订单以及缓存方式数据处理,还有VCard自定义输出格式. 此解决方案中包含有三个项目,   对外服务的主项目,发布时只用这个项目即可.  提供服务的项目,此处为类库形式.  模型类定义,其中包含有入口类出口类的定义,以及实体类,路由可定义在入口类出口类上. 示例中使用了轻量级的Sqlite数据库 在Global.asax文件的public class AppHost :

ServiceStack 项目实例 001 建立项目结构

ServiceStack 用于服务开发,可以为各种形式的网站.软件.APP等提供数据服务,可以提供REST,WebService以及二级制数据形式的服务. 下面根据我们具体项目要求,说一下建立项目的方式: 建立项目 首先需要建立两个项目,一个为ServiceStack的项目,一个是MVC的项目. 1 建立空站点,用于放置SS项目: 选Web项目   --→    ASP.net Web Application  --→  空站点. 2 打开包管理器控制台,如果没有显示,可以在"查看-其它窗口&q

ServiceStack 项目实例 010 ServiceStack.Northwind - 2

ServiceStack.Northwind这个项目中提供了三表关联操作和缓存方式操作数据的示例. 主要的服务文件 CustomersService.cs :查询客户列表 OrdersService.cs :  查询一组订单以及和该组订单相关的订单项,其中每个订单包含客户信息和具体商品详情,共涉及到三个表. CustomerDetailsService.cs 一个客户及其订单,被前一个服务(OrdersService)调用.

ServiceStack 项目实例 002 REST服务与客户端模式

ServiceStack框架提供三种模式的服务接口实现, REST  .Client 以及和WCF相兼容的SOAP WebService ,这三种模式统称WebService,目前对于移动平台和云服务火爆的情形下,最为普及的是REST模式. WebService常用连接模式: REST Client SOAP WebService 在不同模式下,可以使用不同的数据(流)格式,最为常用的是XML .JSON , 主要使用在REST模式下,此外还支持JSV, CSV 以及SOAP格式的数据. XML

ServiceStack 项目实例 005 使用第一个服务功能 (在MVC项目中)

建立好服务后,我们就可以在MVC项目中使用这个服务,在使用这个服务之前,需要先确定一下它所在端口,只需要在SS项目上点右键,将其设置为启动项目,然后运行一下SS项目,在浏览器地址栏,就可以看到这个服务的端口号,并且也能看到已经添加到其中的服务.(运行的效果可以在001节中的截图看到,001节中的端口为59068.) 在MVC的Controller目录下添加一个控制器NewsController.cs,在NewsController.cs中加入一个 Action, 用来显示添加新闻的页面 publ

ServiceStack 项目实例 006 通过官方示例总结的项目结构方案

研读了官方示例的ServiceStack.Examples 和 ServiceStack.Northwind,总结如下的项目方案结构,这种方式比较适合较大的项目,并且规范化很好,易于扩展和对接. 项目结构规范要求 根据ServiceStack官方示例项目,总结出如下项目规范: 项目目录结构,以产品管理模块示例: 需要建立三个项目: >> Product.Web >> Product.ServiceInterface >> Product.ServiceModel 1 对

ServiceStack.OrmLite简单扩展

ServiceStack.OrmLite框架将所有的方法都扩展到了一个IDbConnection对象上,使用起来不是 很方便,在此对该框架做一个简单的封装. OrmLiteExecFilterExt类 using System; using System.Collections.Generic; using System.Data; using System.Text; using System.Threading.Tasks; namespace ServiceStack.OrmLite.Ex

C# redis使用之ServiceStack

需要注意的是:ServiceStack.Redis 中GetClient()方法,只能拿到Master redis中获取连接,而拿不到slave 的readonly连接.这样 slave起到了冗余备份的作用,读的功能没有发挥出来,如果并发请求太多的话,则Redis的性能会有影响. 所以,我们需要的写入和读取的时候做一个区分,写入的时候,调用client.GetClient() 来获取writeHosts的Master的redis 链接.读取,则调用client.GetReadOnlyClient