如何将 Sabre EnhancedSeatMap v5.0.0 服务用作 .Net Web 参考

How to Use Sabre EnhancedSeatMap v5.0.0 Service as .Net Web Reference

在使用旧的 v2.0.0 后,我们决定将 Sabre SOAP EnhancedSeatMap 升级到 v5.0.0。我们将其用作我们的 C# .NET 4.5 项目的 Web 参考(而非服务参考)。实例化新的升级服务时:

var x = new EnhancedSeatMapService();

异常:

Cannot convert type 'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Amenity_Detail[]' to
'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Amenity_Detail'

error CS0030: Cannot convert type 'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Price_AndTaxDescription_Detail[]' to
'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Price_AndTaxDescription_Detail'

error CS0030: Cannot convert type 'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Amenity_Detail[]' to
'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Amenity_Detail'

error CS0030: Cannot convert type 'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Price_AndTaxDescription_Detail[]' to
'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Price_AndTaxDescription_Detail'

error CS0029: Cannot implicitly convert type 'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Amenity_Detail' to
'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Amenity_Detail[]'

error CS0029: Cannot implicitly convert type 'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Price_AndTaxDescription_Detail' to
'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Price_AndTaxDescription_Detail[]'

error CS0029: Cannot implicitly convert type 'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Amenity_Detail' to
'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Amenity_Detail[]'

error CS0029: Cannot implicitly convert type 'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Price_AndTaxDescription_Detail' to
'ServiceSupplier_Sabre.EnhancedSeatMapRQ.Price_AndTaxDescription_Detail[]' 

在 Sabre API 文档中有明确声明此版本支持 .net:

请帮忙

这实际上是因为 .NET 错误采用 sequencemaxOccurs="1000" 而不是将其理解为1000 限制,或者简单地作为一个数组,.NET 创建一个数组的数组。

<xsd:complexType name="AmenityTable">
    <xsd:sequence>
        <xsd:element name="AmenityDetail" maxOccurs="1000" minOccurs="0" type="imap-0400:Amenity_Detail">

这是双数组:

[System.Xml.Serialization.XmlArrayItemAttribute("AmenityDetail", typeof(Amenity_Detail), IsNullable=false)]
public Amenity_Detail[][] AmenityTable {
    get {
        return this.amenityTableField;
    }
    set {
        this.amenityTableField = value;
    }
}

您只需下载包含所有模式的 WSDL,然后从 imap-0400:Amenity_Detailimap-0400:Price_AndTaxDescription_Detail

中删除 maxOccurs="1000"

如果没有,你可以使用我修改后的版本:https://files.fm/f/guzxxkkn