• ServiceStack 简单服务搭建


    1:定义数据实体

    因为ServiceStack是基于请求参数来定义请求路由的,所以关键的是请求参数一定要定义好,同时可以在请求参数上自定义路由名和请求方式,作为对外接口名

    上代码:

    namespace ServiceStack_Moudel
    {
        public class Ticket
        {
            public int TicketId { get; set; }
            public string Name { get; set; }
        }
    
        [Route("/allticket","Get,Post")]
        public class GetAllTicketsInQueueRequest
        {
            public string name { get; set; }
        }
    
        [Route("/ticket","Post")]
        public class QueueTicketRequest
        {
            public string name2 { get; set; }
        }
    
        [Route("/pull","Get")]
        public class PullTicketRequest
        {
            public string name3 { get; set; }
        }
    }
    View Code

    2:接口实现

    接口和实现类,这革不赘述了,其实我觉得简单项目的话,接口层是完全没有必要的,完全是冗余,注意的是要实现你的接口(如果有的话),继承Service(必须要,这是核心),请求和返回参数就用刚才定义的那些就可以,另外 接口名 Any表示什么请求方式都接受,也可以用Get或Post作为方法名,这样只会接受指定的请求方式,请求方式不对会抛异常

     public class TicketService : Service, ITicketService
        {
            public List<Ticket> Any(GetAllTicketsInQueueRequest request)
            {
                var ticketList = new List<Ticket>();
                for (int i = 0; i < 3; i++)
                {
                    var ticket = new Ticket { Name = i.ToString(), TicketId = i + 1 };
                    ticketList.Add(ticket);
                }
                return ticketList;
            }
    
            public string Any(QueueTicketRequest request)
            {
                return "query ticket successfully!";
            }
    
            public Ticket Any(PullTicketRequest request)
            {
                var ticket = new Ticket { Name = "pull successfully!", TicketId = 99 };
                return ticket;
            }
        }
    View Code
        public interface ITicketService
        {
            List<Ticket> Any(GetAllTicketsInQueueRequest request);
    
            string Any(QueueTicketRequest request);
    
            Ticket Any(PullTicketRequest request);
        }
    View Code

    3:准备Host 部署

    这边分两种场景部署,一是Host在控制台程序,另一种是IHost在IIS

    3.1 Host 控制台

    Host控制台 继承的是AppSelfHostBase 这个类

        class Program
        {
            static void Main(string[] args)
            {
                var listeningOn = args.Length == 0 ? "http://*:1337/" : args[0];
                var appHost = new TicketServiceHost()
                    .Init()
                    .Start(listeningOn);
    
                Console.WriteLine("AppHost Created at {0}, listening on {1}",
                    DateTime.Now, listeningOn);
                Console.ReadKey();
    
            }
        }
    View Code

    Host类

        public class TicketServiceHost : AppSelfHostBase
        {
            /// <summary>
            /// Default constructor.
            /// Base constructor requires a name and assembly to locate web service classes. 
            /// </summary>
            public TicketServiceHost()
                : base("Ticket Service", typeof(TicketService).Assembly)
            {
    
            }
    
            /// <summary>
            /// Application specific configuration
            /// This method should initialize any IoC resources utilized by your web service classes.
            /// </summary>
            /// <param name="container"></param>
            public override void Configure(Container container)
            {
    
            }
        }
    View Code

    运行控制台程序,然后打开localhost:1337就会看到下图,表明Host成功,服务可以使用了。

    3.2 Host在IIS

     Host在IIs 继承的是AppHostBase类

        public class TicketServiceHost : AppHostBase
        {
            //Register your web service with ServiceStack.
            public TicketServiceHost()
                : base("Ticket Service", typeof(TicketService).Assembly)
            { }
    
            public override void Configure(Funq.Container container)
            {
                //Register any dependencies your services use here.
            }
        }
    View Code

    在Global.asax中 初始化服务

        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                new TicketServiceHost().Init();
            }
        }
    View Code

    结束后编译下,把这个Web项目部署在IIS上,直接启动就可以看到如下图,说明成功了

      

    4:测试

    调用地址就使用他推荐的方式就可以,或者使用我们自定义的别名也行,可以指定返回的数据格式,有以下几种方式,感兴趣的可以把json换成xml试试看

    1: http://localhost:8083/json/reply/GetAllTicketsInQueueRequest?name=123456

    2: http://localhost:8083/allticket.json?name=12345678

    3: http://localhost:8083/allticket?name=123456&format=json

    简单的总结了一下,也希望对大家有帮助

    对了 差点忘了,一个非常重要的点,就是Host在IIS的话,webconfig一定要增加ServiceStack节点,我就是因为没有增加节点,导致一直Host不成功

      <system.webServer>
        <handlers>
          <add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true"/>
        </handlers>
      </system.webServer>
    View Code

    增加这个节点就大功告成了!

    5:附带项目结构

  • 相关阅读:
    一个老菜鸟所理解的UX及产品流
    自学MVC看这里——全网最全ASP.NET MVC 教程汇总
    Windows10的革命之路-全新UWP开发平台
    七天学会ASP.NET MVC(七)——创建单页应用
    Windows10 会不会成为微软的新起点?
    Visual Studio 2015速递(4)——高级特性之移动开发
    Visual Studio 2015速递(3)——ASP.NET 新特性
    Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力)
    Visual Studio 2015速递(1)——C#6.0新特性怎么用
    Mac OS 环境下 安装 Asp.Net及使用Yeoman 创建Asp.Net 项目
  • 原文地址:https://www.cnblogs.com/wolfworker/p/8953404.html
Copyright © 2020-2023  润新知