您的位置:首页 > 其它

ServiceStack Web Service 创建与调用简单示列

2015-12-02 17:17 417 查看
目录

ServiceStack 概念

ServiceStack Web Service 创建与调用简单示列

上篇文章介绍了ServiceStack是什么,本章进入主题,如何快速简单的搭建ServiceStack服务环境和调用。

ServiceStack服务搭建

服务的搭建有两种方法,我会一一介绍。

第一种方法如下:

1.创建网站项目



2.安装发布组件







packages.confing文件为您提供每一个ServiceStack dll 的版本和运行时信息。

定义是 ServiceStack <Ticket> 请求数据契约

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ServiceStack;

namespace Model
{
/// <summary>
/// 创建票据 请求实体
/// </summary>
public class TicketRequest : IReturn<TicketResponse>
{
public int TicketId { get; set; }
public int TableNumber { get; set; }
public int ServerId { get; set; }
}
public class TicketDeleteRequest
{
public int TicketId { get; set; }
}
}


定义ServiceStack <Ticket> 响应数据契约

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Model
{
/// <summary>
/// 创建票据响应数据实体
/// </summary>
public class TicketResponse
{
public int TicketId { get; set; }
public int TableNumber { get; set; }
public int ServerId { get; set; }
public List<OrderResponse> Orders { get; set; }
public DateTime Timestamp { get; set; }
}
/// <summary>
/// 票据所属订单
/// </summary>
public class OrderResponse
{
public int OrderId { get; set; }
}
}


定义ServiceStack 接口方法

using Model;
using System.Collections.Generic;

namespace Interface
{
public interface ITicketService
{
/// <summary>
/// 方法请求模式和路由规则 后面再说
/// 请求票据列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
List<TicketResponse> Any(TicketRequest request);
/// <summary>
/// 删除指定票据
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
bool POST(TicketDeleteRequest deleteid);
}
}


实现ServiceStack 接口方法

using Interface;
using Model;
using System;
using System.Collections.Generic;

namespace Service
{
public class TicketService : ServiceStack.Service, ITicketService
{
/// <summary>
/// 方法请求模式和路由规则 后面再说
/// 请求票据列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public List<TicketResponse> Any(TicketRequest request)
{
List<TicketResponse> result = new List<TicketResponse>();
List<OrderResponse> orderlist = new List<OrderResponse>();
orderlist.Add(new OrderResponse() { OrderId = 1 });
result.Add(new TicketResponse()
{
Orders = orderlist,
ServerId = 1,
TableNumber = 1,
TicketId = 1,
Timestamp = DateTime.Now
});
result.Add(new TicketResponse()
{
Orders = orderlist,
ServerId = 2,
TableNumber = 2,
TicketId = 2,
Timestamp = DateTime.Now
});

return result;
}
/// <summary>
/// 删除指定票据
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public bool POST(TicketDeleteRequest deleteid)
{
return true;
}
}
}


实现ServiceStack服务宿主

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

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


启动ServiceStack服务宿主

<%@ Application Language="C#" %>

<script runat="server">

void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
new Service.Host.TickServiceHost().Init();
}

void Application_End(object sender, EventArgs e)
{
//  在应用程序关闭时运行的代码

}

void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码

}

void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码

}

void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不引发该事件。

}

</script>


添加ServiceStack网站集成配置

<?xml version="1.0" encoding="utf-8"?>

<!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=169433 -->

<configuration>

<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<!--Required for IIS 7 (and above) -->
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add path="*.aspx" name="DefaultHttpApplication" type="System.Web.UI.PageHandlerFactory" verb="*" />
<add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true"/>
</handlers>
</system.webServer>
</configuration>


至此ServiceStack服务已经完成,运行程序可以看到界面如下,其中TicketRequest和TicketDeleteRequest可以理解成实际的调用方法,里面定义的参数可以理解成方法的请求参数,后续调用会继续讲解



整个项目解决方案的框架如下:



第二种创建方法比较简单,快速,利用ServiceStack官方提供的模板直接生成,具体操作方法如下:

1.打开VS,工具扩展和更新



2.搜索servicestack提供的组件



3.安装完成后创建新项目,来自模板



创建完成后的项目框架如下



5.改成我们所需要的



ServiceStack客户端调用

using ConsoleApplication1.model;
using ServiceStack;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//客户端采用json数据格式
JsonServiceClient client1 = new JsonServiceClient("http://localhost:32617/");
Console.WriteLine("http://localhost:32617/");
//TicketRequest 为请求的方法
List<TicketResponse> responseSearch = client1.Get<List<TicketResponse>>(new TicketRequest() { TicketId = 1 });
Console.WriteLine(responseSearch.Count);

bool responseDelete = client1.Post<bool>(new TicketDeleteRequest() { TicketId = 1 });
Console.WriteLine(responseDelete);

Console.WriteLine("http://localhost:36107/");

List<TicketResponse> responseSearch1 = client1.Get<List<TicketResponse>>(new TicketRequest() { TicketId = 1 });
Console.WriteLine(responseSearch1.Count);

bool responseDelete1 = client1.Post<bool>(new TicketDeleteRequest() { TicketId = 1 });
Console.WriteLine(responseDelete1);

Console.ReadLine();
}
}
}




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1.model
{
/// <summary>
/// 创建票据 请求实体
/// IReturn<TicketResponse> 指该方法返回的数据实体
/// </summary>
public class TicketRequest
{
public int TicketId { get; set; }
public int TableNumber { get; set; }
public int ServerId { get; set; }
}
public class TicketDeleteRequest
{
public int TicketId { get; set; }
}
}


浏览器端调用:



请求URL如下:



浏览器输入http://localhost:36107/json/reply/TicketRequest?TicketId=1



浏览器默认请求为GET,如果方法定义POST请求类型,可以采用第三方模拟Rest请求工具



参考:

https://servicestack.net/features

https://msdn.microsoft.com/zh-cn/magazine/dn342871.aspx

http://www.cnblogs.com/shanyou/p/3348347.html

/article/4778108.html

作者:释迦苦僧 出处:/article/5294272.html 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

本文为新手试写,如果有问题,欢迎博友指正,在下不甚感激,后续还会继续更新ServiceStack其他相关文章。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: