【问题标题】:How to use ServiceStack to relay a request to another ServiceStack server如何使用 ServiceStack 将请求中继到另一个 ServiceStack 服务器
【发布时间】:2014-09-07 13:22:48
【问题描述】:

我需要将一个请求中继到我的 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; }
}   

这是我在服务器 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;
    }
}

目的是接收到路由“/jmalist”的请求,然后在请求中包含完整的 DTO 信息,并访问服务器 2 以获取 DTO 数据。问题是无处放置路由“/jmalist”并且传递“请求”似乎没有路由。我如何才能请求与此请求的输入相同的 DTO,但我的服务器 2 服务器?

另一种表述方式,以确保清楚这一点是考虑浏览器或 REST 客户端发生的情况。我可以直接向服务器 1 或服务器 2 发出 DTO 请求。服务器 2 是最简单的情况,因为它只响应请求的数据。服务器 1 没有数据,但会从服务器 2 获取数据。这就是这段代码的目标。

(我应该注意,我知道如何将 Json 字段序列化为新的请求 URL,但这似乎非常低效且代码密集。)

【问题讨论】:

    标签: servicestack


    【解决方案1】:

    ServiceStack C# Service Clients 在发出GET 请求时使用基于请求 DTO 填充值的最佳匹配路由,因此虽然路由信息不在请求 DTO 实例本身上,发送请求 DTO 时,服务客户端使用最接近的路由定义来填充以发出请求。

    由于 ServiceClients 也接受字符串 URL,您可以使用 base.Request 在服务中获取有关请求的 HTTP 请求信息,另一种方法是仅传递调用请求时使用的路径信息,例如:

    var srv = new JsonServiceClient("http://localhost:1311");
    var jmaSetList = srv.Get<List<BarSet>>(base.Request.PathInfo);
    

    【讨论】:

    • 我对此做了些许改动: var jmaSetList = srv.Get>(base.Request.Dto);因为我在 Dto 中有请求所需的信息,而且效果很好!谢谢!!
    猜你喜欢
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    相关资源
    最近更新 更多