需要与英国API(LDBWS)国家铁路咨询公司对接的帮助

本文关键字:咨询公司 铁路 帮助 国家 英国 API LDBWS | 更新日期: 2023-09-27 18:30:13

我已经注册了一个代币,可以访问英国国家铁路公司(National Rail)、API现场发车板,但我似乎无法使用它。有人能指出我做错了什么吗?

我使用WSDL.EXE构建了一个C#SOAP Proxy类,如下所示:https://realtime.nationalrail.co.uk/ldbws/

生成的.cs代理文件有1318行长,但看起来是正确的。

我的代码如下:(LDBServiceSoap是生成的代理类)

static void Main(string[] args)
{
    LDBServiceSoap ldb = new LDBServiceSoap();
    ldb.AccessTokenValue = new AccessToken() {
        TokenValue = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    };
    StationBoard sb = ldb.GetDepartureBoard(4, "WAT", "VIC", FilterType.from, 0, 120);
}

Url是在代理类中设置的,所以我想不出其他需要做的事情。

但是,当调试器进入GetDepartmentBoard方法时,它会抛出WebException"请求失败,HTTP状态为401:未授权。"

有人知道我在这里错过了什么/做错了什么吗?

你太棒了!

需要与英国API(LDBWS)国家铁路咨询公司对接的帮助

如果您通过OpenLDWS注册获得了访问令牌,那么您的令牌将仅在https://realtime.nationalrail.co.uk/OpenLDBWS/可能是您的问题的端点

不确定您是如何生成源的,但我已经设法使用给定WSDL的Web服务客户端获得了一个工作版本,以从WSDL:生成源

wsimport -extension -keep -XadditionalHeaders https://lite.realtime.nationalrail.co.uk/OpenLDBWS/wsdl.aspx?ver=2016-02-16

然后,一旦源位于类路径上,我就用以下命令调用该方法:

AccessToken token = new AccessToken(); // This class is generated from the WSDL
token.setTokenValue("yourTokenHere");
Ldb ldb = new Ldb();
LDBServiceSoap api = ldb.getLDBServiceSoap();
GetBoardRequestParams reqParams = new GetBoardRequestParams();
reqParams.setCrs("STA"); // Station Code
reqParams.setNumRows(10);
reqParams.setTimeOffset(-120);
StationBoardResponseType departures = api.getDepartureBoard(reqParams, token);

虽然Rob Evans的回答并没有完全提供解决方案,但它确实向我指明了正确的方向。我必须在C#中实现这一点,下面的代码对我有效

        AccessToken token = new AccessToken();
        token.TokenValue = "xxx-xxx-xxx";
        ldb client = new ldb();
        client.AccessTokenValue = token;
        StationBoard sb = client.GetDepartureBoard(10, "ABW", "", FilterType.to, 0, 120);