servicestack 如何使用ServiceStack将请求中继到另一个ServiceStack服务器,servicestack,servicestack" /> servicestack 如何使用ServiceStack将请求中继到另一个ServiceStack服务器,servicestack,servicestack" />

servicestack 如何使用ServiceStack将请求中继到另一个ServiceStack服务器

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/{

我需要将对我的ServiceStack服务器(称为服务器1)的请求中继到另一个ServiceStack服务器(称为服务器2)。我不想讨论我为什么需要它,而是想讨论如何从技术上解决它。
以下是我在服务器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中有请求所需的信息,而且它工作得非常好!谢谢