【发布时间】:2018-04-24 01:47:45
【问题描述】:
我正在尝试创建一个基于 SOAP 1.2 的 C#/WCF 接口,它应该处理 HTNG/OTA 消息。 (酒店通信标准)
此 OTA 标准的发布可在此处找到:Open Travel Alliance - Specifications
此出版物包含一堆 .xsd 文件,这些文件定义了可以通过此类接口传递的所有类型。例如,要将新预订转移到酒店/系统,您可以使用 OTA_HotelResNotifRQ 消息,该消息可以包含 HotelReservations。 SOAP XML 看起来像这样:
<soapenv:Body>
<OTA_HotelResNotifRQ EchoToken="1474033560.151702" TimeStamp="2016-09-16T06:46:00-08:00" Version="1.001" xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opentravel.org/OTA/2003/05 NeedToGetThisPathFromIdeas/OTA_HotelResNotifRQ.xsd" ResStatus="Modify">
<POS>
...
</POS>
<HotelReservations>
<HotelReservation CreateDateTime="2015-11-15T10:39:01-08:00" ResStatus="Reserved" LastModifyDateTime="2016-09-16T06:46:00-08:00">
<UniqueID Type="14" ID="133121274"/>
<RoomStays>
<RoomStay MarketCode="Other OTA" SourceOfBusiness="OTA">
...
</RoomStay>
</RoomStays>
</HotelReservation>
</HotelReservations>
</OTA_HotelResNotifRQ>
</soapenv:Body>
问题在于有多个消息,因此多个 .xsd 定义使用相同的元素/类。例如,对于上面提到的 HotelReservations,所有标记的消息都使用它:
所有这些 .xsd 文件都定义了相同的类,例如 HotelReservation 或 RoomStay 等,并且还有一个附加的 .xsd(HotelReservation,不是 RQ 或 RS)定义了这些消息中使用的类型。我的意思是这些模式定义非常非常多余。
当我尝试使用 .NET Framework 中的 xsd.exe 或 WSCF.Blue 从这些文件生成 .cs 类时,我会遇到所有重复的类型,例如 HotelReservationType 将由OTA_HotelResRQ.cs,又是 OTA.HotelResNotifRQ.cs,又是 etc。这当然会导致无用的代码,并导致 Visual Studio 疯狂地到处喊“模棱两可的引用”。
如何将这些 .xsd 定义转换为 .cs 类而没有冗余,所有类型只定义一次?有没有工具可以做到这一点,或者 Open Travel Alliance 真的把他们的出版物搞砸了,我简直被搞砸了?
【问题讨论】:
-
有人吗?...我不可能是唯一一个面临此类问题的人...
标签: c# soap xsd code-generation redundancy