需要帮助与国家铁路咨询(英国)API(LDBWS)接口

时间:2014-11-13 16:15:35

标签: c# web-services soap

我已经注册了一个令牌来访问National Rail(UK),Live Departure Boards 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设置在代理类中,所以我想不出我需要做的任何其他事情。

但是当调试器到达GetDepartureBoard方法时,它会抛出WebException“请求失败,HTTP状态为401:未经授权。”

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

你太棒了!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

不确定您是如何生成源代码的,但我已设法使用此Web service client given WSDL获取工作版本以从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);

答案 2 :(得分:0)

尽管Rob Evans的回答并未完全提供解决方案,但确实向我显示了正确的方向。我必须用C#来实现,下面的代码对我有用。

Settings => Appearance & Behavior => Notifications