servicestack 如何使用ServiceStack将请求中继到另一个ServiceStack服务器
我需要将对我的ServiceStack服务器(称为服务器1)的请求中继到另一个ServiceStack服务器(称为服务器2)。我不想讨论我为什么需要它,而是想讨论如何从技术上解决它。
servicestack 如何使用ServiceStack将请求中继到另一个ServiceStack服务器,
servicestack,
servicestack,我需要将对我的ServiceStack服务器(称为服务器1)的请求中继到另一个ServiceStack服务器(称为服务器2)。我不想讨论我为什么需要它,而是想讨论如何从技术上解决它。 以下是我在服务器1和服务器2中的DTO代码: // Jma data [Route("/jmalist", "GET")] [Route("/jmalist/{Instrument}/{Interval}/{Session}/{Smooth}/{Phase}", "GET")] [Route("/jmalist/{
以下是我在服务器1和服务器2中的DTO代码:
// Jma data
[Route("/jmalist", "GET")]
[Route("/jmalist/{Instrument}/{Interval}/{Session}/{Smooth}/{Phase}", "GET")]
[Route("/jmalist/{Instrument}/{Interval}/{Session}/{Smooth}/{Phase}/{User}", "GET")]
public class JmaSets : IReturn<List<BarSet>>
{
public string Instrument { get; set; }
public int Interval { get; set; }
public string Session { get; set; }
public double Smooth { get; set; }
public double Phase { get; set; }
public string User { get; set; }
public DateTime sTime { get; set; }
public DateTime eTime { get; set; }
}
//Jma数据
[路线(“/jlist”,“GET”)]
[路由(“/jlist/{Instrument}/{Interval}/{Session}/{Smooth}/{Phase}”,“GET”)]
[路由(“/jlist/{Instrument}/{Interval}/{Session}/{Smooth}/{Phase}/{User}”,“GET”)]
公共类JmaSets:IReturn
{
公共字符串工具{get;set;}
公共整数间隔{get;set;}
公共字符串会话{get;set;}
公共双光滑{get;set;}
公共双阶段{get;set;}
公共字符串用户{get;set;}
公共日期时间时间时间{get;set;}
公共日期时间时间{get;set;}
}
以下是我在服务器1中的服务代码:
public class JmaSetsService : Service
{
public object Get(JmaSets request)
{
List<BarSet> jmaSetList = new List<BarSet>();
string baseUrl = "http://localhost:1311";
JsonServiceClient srv = new JsonServiceClient(baseUrl);
jmaSetList = srv.Get<List<BarSet>>(request);
return jmaSetList;
}
}
公共类jmasetservice:Service
{
公共对象获取(JmaSets请求)
{
List jmaSetList=新列表();
字符串baseUrl=”http://localhost:1311";
JsonServiceClient srv=新的JsonServiceClient(baseUrl);
jmaSetList=srv.Get(请求);
返回jmaSetList;
}
}
目的是接收对路由“/jlist”的请求,该路由随后在请求中包含完整的DTO信息,并访问服务器2以获取DTO数据。问题是没有地方放置路由“/jList”,传递“请求”时似乎没有路由。我如何才能请求与此请求输入相同的确切DTO,但却请求到我的服务器2服务器
说明这一点的另一种方法是,确保这一点是明确的,即考虑从浏览器或REST客户端发生了什么。我可以直接向服务器1或服务器2请求DTO。服务器2是一个简单的例子,因为它只响应请求的数据。服务器1没有数据,但将从服务器2获取数据。这就是该代码的目标
(我应该注意,我知道如何将字段Json序列化为一个新的请求URL,但这似乎非常低效,而且毫无理由需要大量代码。)ServiceStack在发出GET
请求时,根据请求DTO的填充值使用最佳匹配路由,因此,虽然路由信息不在请求DTO实例本身上,但当向服务客户端发送请求DTO时,将使用其填充的最合适的路由定义来发出请求
由于ServiceClient也接受字符串URL,并且您可以使用base.Request
在服务中获取有关请求的HTTP请求信息,另一种方法是只传递调用请求时使用的路径信息,例如:
var srv = new JsonServiceClient("http://localhost:1311");
var jmaSetList = srv.Get<List<BarSet>>(base.Request.PathInfo);
var srv=新的JsonServiceClient(“http://localhost:1311");
var jmaSetList=srv.Get(base.Request.PathInfo);
我对此做了一点修改:var jmaSetList=srv.Get(base.Request.Dto);因为我在Dto中有请求所需的信息,而且它工作得非常好!谢谢