我已经注册了一个令牌来访问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:未经授权。”
有人知道我错过了什么/做错了吗?
你太棒了!
答案 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