【问题标题】:Need help interfacing with the National Rail Enquiries (UK) API (LDBWS)需要与 National Rail Inquiries (UK) API (LDBWS) 接口的帮助
【发布时间】:2014-11-13 16:15:35
【问题描述】:

我已经注册了一个令牌来访问 National Rail (UK),Live Departure Boards API,但我似乎无法让它工作。谁能指出我做错了什么?

我使用 WSDL.EXE 构建了一个 C# SOAP 代理类,如下所示: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:未授权。”

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

你真棒!

【问题讨论】:

    标签: c# web-services soap


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      不确定您是如何生成源代码的,但我已经设法使用此 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);
      

      【讨论】:

        【解决方案3】:

        尽管 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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-06-07
          • 1970-01-01
          • 2017-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-02
          相关资源
          最近更新 更多