Visual Studio - Sabre GetReservationRS 未在 Intellisense 中显示旅行项目
Visual Studio - Sabre GetReservationRS not showing travel items in Intellisense
我正在尝试实施新的 GetReservationRQ/RS API,因为旧的 TravelItineraryReadRQ 显然将在 2018 年 12 月停用。
我可以拨打电话并得到回复,并且 XML 有效载荷中存在所有有效的旅行数据,但我无法让 Intellisense 显示项目字段中的项目代理 class。我可能解释不正确,所以我在下面有一些截图。
我已经尝试深入研究由 WSDL 创建的 reference.cs 文件,我确实看到了 GetReservationRQ 和 TravelItinerarReadRQ 之间创建对象模型的方式的一些差异,但我不知道怎么办。
调试模式下的填充对象显示所有有效的预订项:
Intellisense 显示没有任何其他可见成员的项目字段:
编辑 2018 年 7 月 26 日
感谢卡洛斯在下面的回答,我通过实施他的更改使这项工作正常进行。为了后代,这是我的工作代码:
public class GetReservationReq
{
private GetReservationService service;
public GetReservationRS response;
public string xmlResponse;
public GetReservationReq()
{
//parameterless constructor for serializiation
}
public GetReservationReq(SessionToken token, string locator)
{
//MessageHeader
MessageHeader mHeader = new MessageHeader();
PartyId[] pId = { new PartyId() };
pId[0].Value = "SWS";
From from = new From();
from.PartyId = pId;
To to = new To();
to.PartyId = pId;
mHeader.Action = "getReservationRQ";
mHeader.Service = new Service()
{
Value = mHeader.Action
};
mHeader.ConversationId = token.conversationID;
mHeader.CPAId = token.ipcc;
mHeader.From = from;
mHeader.To = to;
mHeader.MessageData = new MessageData()
{
Timestamp = DateTime.UtcNow.ToString()
};
//Security
Security sec = new Security();
//Security1 sec = new Security1();
sec.BinarySecurityToken = token.securityToken;
//Service
service = new GetReservationService();
service.MessageHeaderValue = mHeader;
service.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap11;
service.SecurityValue = sec;
//create the request
GetReservationRQ req = new GetReservationRQ();
req.Version = "1.18.0";
req.RequestType = "Stateful"; //This indicates that we are looking to pull up an existing PNR
req.Locator = locator;
req.ReturnOptions = new ReturnOptions();
req.ReturnOptions.ViewName = "Full";
req.ReturnOptions.ResponseFormat = "STL";
try
{
//execute the response
response = service.GetReservationOperation(req);
//cast response items to usable Object
ReservationPNRB content = (ReservationPNRB)response.Item;
//testing - iterate through reservation elements and do stuff
foreach (var segment in content.OpenReservationElements.OpenReservationElement)
{
Console.WriteLine(segment.id + " - " + segment.type);
}
Console.Read();
//serialize the response for logging if necessary
xmlResponse = Serializer.toXML(response);
//serialize response for logging if necessary
using (StreamWriter myWriter = new StreamWriter(@"C:\SABRE_DATA\TMP\xmlItin.txt", true))
{
XmlSerializer mySerializer = new XmlSerializer(typeof(GetReservationRS));
mySerializer.Serialize(myWriter, response);
StringWriter myStringWriter = new StringWriter();
mySerializer.Serialize(myStringWriter, response);
xmlResponse = myStringWriter.ToString();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
}
}
如您在上一个打印屏幕中所见,项目 属性 是对象类型。这意味着您需要将其转换为您期望的特定类型。
要在 属性 中找到可以 return 编辑的有效类型,您需要转到 reference.cs,在那里您会看到 [=17] 的顶部=](作为属性)API 可以 return 在此 属性.
中的有效对象类型
我正在尝试实施新的 GetReservationRQ/RS API,因为旧的 TravelItineraryReadRQ 显然将在 2018 年 12 月停用。
我可以拨打电话并得到回复,并且 XML 有效载荷中存在所有有效的旅行数据,但我无法让 Intellisense 显示项目字段中的项目代理 class。我可能解释不正确,所以我在下面有一些截图。
我已经尝试深入研究由 WSDL 创建的 reference.cs 文件,我确实看到了 GetReservationRQ 和 TravelItinerarReadRQ 之间创建对象模型的方式的一些差异,但我不知道怎么办。
调试模式下的填充对象显示所有有效的预订项:
Intellisense 显示没有任何其他可见成员的项目字段:
编辑 2018 年 7 月 26 日
感谢卡洛斯在下面的回答,我通过实施他的更改使这项工作正常进行。为了后代,这是我的工作代码:
public class GetReservationReq
{
private GetReservationService service;
public GetReservationRS response;
public string xmlResponse;
public GetReservationReq()
{
//parameterless constructor for serializiation
}
public GetReservationReq(SessionToken token, string locator)
{
//MessageHeader
MessageHeader mHeader = new MessageHeader();
PartyId[] pId = { new PartyId() };
pId[0].Value = "SWS";
From from = new From();
from.PartyId = pId;
To to = new To();
to.PartyId = pId;
mHeader.Action = "getReservationRQ";
mHeader.Service = new Service()
{
Value = mHeader.Action
};
mHeader.ConversationId = token.conversationID;
mHeader.CPAId = token.ipcc;
mHeader.From = from;
mHeader.To = to;
mHeader.MessageData = new MessageData()
{
Timestamp = DateTime.UtcNow.ToString()
};
//Security
Security sec = new Security();
//Security1 sec = new Security1();
sec.BinarySecurityToken = token.securityToken;
//Service
service = new GetReservationService();
service.MessageHeaderValue = mHeader;
service.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap11;
service.SecurityValue = sec;
//create the request
GetReservationRQ req = new GetReservationRQ();
req.Version = "1.18.0";
req.RequestType = "Stateful"; //This indicates that we are looking to pull up an existing PNR
req.Locator = locator;
req.ReturnOptions = new ReturnOptions();
req.ReturnOptions.ViewName = "Full";
req.ReturnOptions.ResponseFormat = "STL";
try
{
//execute the response
response = service.GetReservationOperation(req);
//cast response items to usable Object
ReservationPNRB content = (ReservationPNRB)response.Item;
//testing - iterate through reservation elements and do stuff
foreach (var segment in content.OpenReservationElements.OpenReservationElement)
{
Console.WriteLine(segment.id + " - " + segment.type);
}
Console.Read();
//serialize the response for logging if necessary
xmlResponse = Serializer.toXML(response);
//serialize response for logging if necessary
using (StreamWriter myWriter = new StreamWriter(@"C:\SABRE_DATA\TMP\xmlItin.txt", true))
{
XmlSerializer mySerializer = new XmlSerializer(typeof(GetReservationRS));
mySerializer.Serialize(myWriter, response);
StringWriter myStringWriter = new StringWriter();
mySerializer.Serialize(myStringWriter, response);
xmlResponse = myStringWriter.ToString();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
}
}
如您在上一个打印屏幕中所见,项目 属性 是对象类型。这意味着您需要将其转换为您期望的特定类型。
要在 属性 中找到可以 return 编辑的有效类型,您需要转到 reference.cs,在那里您会看到 [=17] 的顶部=](作为属性)API 可以 return 在此 属性.
中的有效对象类型