我有一个服务正在使用的API,服务将Json数据POST到API,API将POSTed数据保存到数据库,然后返回POST的内容。
我们尝试过多次使用DHC到202.59.42.244/api/BoardingPass(这是API) 使用Json Data:
{"Id":0,"BaggageAllowance":20,"FareType":"Starter Max","PreArrivalTimeInMinutes":30,"FlightNumber":"506","FlightType":"DOM","CarrierCode":"JQ","Gate":"","CodeShareFlight":null,"FlightDescription":"Codeshare with Qantas","DepartureAirport":"Melbourne (Tullamarine)","DepartureAirportCode":"MEL","DepartureDateUTC":"2015-04-14","DepartureTime":"09:20","ArrivalAirport":"Sydney","ArrivalAirportCode":"SYD","ArrivalTime":"10:45","PNR":"O8GNRF","BookingCulture":"en-AU","BoardingSequenceNumber":"002","SeatNumber":"07B","SpecialServiceRequests":"WCEM,WCID","isBannerShow":true,"NumberOfBags":2,"PassengerId":149153129,"FirstName":"S","LastName":"WILLIAMS","EmailAddress":"quenie.daloso@bcstechnology.com.au","PassportNumber":null,"PassportNationality":null,"PassportExpiryDate":"0001-01-01","Barcode":"002050627","ConnectingFlight":false,"CounterAndBagDropOpenInMinutes":90,"CounterAndBagDropCloseInMinutes":50,"Status":0,"Token":null,"CarryOnBaggage":7}
并且POST请求返回json数据,这是一个成功!
但是这个web-checkin服务将相同的数据发布到API,API工作,API将POSTed数据保存到DB,然后返回“Timeout something something”。
这究竟意味着什么?它到达API并使API完成其工作,但无法返回json数据。
这是API的代码。
public IHttpActionResult PostBoardingPass(BoardingPassRequest request)
{
try
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (request != null)
{
#region Error Handling parameters
//some error handling here
#endregion
BoardingPass result;
//check duplicates
var isDuplicate = helper.CheckDuplicateBoardingPass(request);
if (isDuplicate)
{
//Update Boarding Pass in the database
result = helper.UpdateBoardingPass(request);
//parse to send as result
return Ok(helper.ParseBoardingPass(result));
}
// Create Boarding Pass in the database
result = helper.CreateBoardingPass(request);
//return CreatedAtRoute("DefaultApi", new { id = result.Id }, helper.ParseBoardingPass(result));
return Ok(helper.ParseBoardingPass(result));
}
return BadRequest(Resource.ResourceManager.GetString("GeneralNullModel"));
}
catch (Exception e)
{
//a method to log errors
LogError(e);
throw;
}
}
以下是调用API的网络签入代码。
static void Main(string[] args)
{
string responseFromServer = string.Empty;
var webRequest = (HttpWebRequest)WebRequest.Create("http://202.xx.xx.244:80/api/BoardingPass");
webRequest.Method = "POST";
webRequest.Accept = "application/json";
webRequest.ContentType = "application/json";
//var boardingPassData = JsonConvert.SerializeObject(boardingPassModelData);
var boardingPassData = "{\"Id\":0,\"BaggageAllowance\":20,\"FareType\":\"Starter Max\",\"PreArrivalTimeInMinutes\":30,\"FlightNumber\":\"506\",\"FlightType\":\"DOM\",\"CarrierCode\":\"JQ\",\"Gate\":\"\",\"CodeShareFlight\":null,\"FlightDescription\":\"Codeshare with Qantas\",\"DepartureAirport\":\"Melbourne (Tullamarine)\",\"DepartureAirportCode\":\"MEL\",\"DepartureDateUTC\":\"2015-04-20\",\"DepartureTime\":\"09:20\",\"ArrivalAirport\":\"Sydney\",\"ArrivalAirportCode\":\"SYD\",\"ArrivalTime\":\"10:45\",\"PNR\":\"O8GNRF\",\"BookingCulture\":\"en-AU\",\"BoardingSequenceNumber\":\"002\",\"SeatNumber\":\"07B\",\"SpecialServiceRequests\":\"WCEM,WCID\",\"isBannerShow\":true,\"NumberOfBags\":2,\"PassengerId\":149153129,\"FirstName\":\"S\",\"LastName\":\"WILLIAMS\",\"EmailAddress\":\"quenie.daloso@bcstechnology.com.au\",\"PassportNumber\":null,\"PassportNationality\":null,\"PassportExpiryDate\":\"0001-01-01\",\"Barcode\":\"002050627\",\"ConnectingFlight\":false,\"CounterAndBagDropOpenInMinutes\":90,\"CounterAndBagDropCloseInMinutes\":50,\"Status\":0,\"Token\":null,\"CarryOnBaggage\":7}";
//_logger.Info("API Request: " + boardingPassData); //- I sent this logged request in trail mail ({"Id":0,"BaggageAllowance":20,………… CarryOnBaggage":7})
byte[] boardingPassbyteArray = Encoding.UTF8.GetBytes(boardingPassData);
webRequest.ContentLength = boardingPassbyteArray.Length;
Stream stream = webRequest.GetRequestStream();
stream.Write(boardingPassbyteArray, 0, boardingPassbyteArray.Length);
stream.Close();
using (var webResponse = (HttpWebResponse)webRequest.GetResponse())
{
var status = webResponse.StatusDescription;
Console.WriteLine(status);
stream = webResponse.GetResponseStream();
if (stream != null)
{
var reader = new StreamReader(stream);
responseFromServer = reader.ReadToEnd();
Console.WriteLine(responseFromServer);
reader.Close();
stream.Close();
}
}
Console.ReadLine();
}
我已经为自己测试了网络签名代码,它确实有效!但我不知道什么时候API返回“超时某事”错误,即使它做了它需要做的事情?