2

特定のキューに残っている PNR を自動的にキャンセルするサービスを作成しています。これは、OTA_CancelLLSRQ 要求では非常に単純に聞こえますが、各セグメントを個別にループする必要があるようです。または、すべてのセグメントを一度にキャンセルする方法はありますか?

アプリケーションで PNR クラスを定義しました。このクラスには、"" 呼び出しで取得できるすべての情報が含まれています。

PNR をキャンセルするには、現在次のコードを使用しています。

MessageHeader msgHeader = new MessageHeader
{
    ConversationId = "TestSession",
    CPAId = licenseId,
    Action = "OTA_CancelLLSRQ",
    Service = new Service { Value = "OTA_CancelLLSRQ" },
    MessageData = new MessageData
    {
        MessageId = "xxx",
        Timestamp = DateTime.UtcNow.ToString("s") + "Z"
    },
    From = new From()
    {
        PartyId = new PartyId[]
        {
            new PartyId { Value = "WebServiceClient"}
        }
    },
    To = new To()
    {
        PartyId = new[]
        {
            new PartyId { Value = "WebServiceSupplier"}
        }
    }
};

var segmentList = new List<OTA_CancelRQSegment>();
foreach (var segment in pnrObject.Segments)
{
    var requestSegment = new OTA_CancelRQSegment
    {
        Number = segment.SegmentNumber.ToString()
    };

    segmentList.Add(requestSegment);
}

var request = new OTA_CancelRQ()
{
    Version = "2.0.0",
    TimeStamp = DateTime.UtcNow,
    TimeStampSpecified = true,
    Segment = segmentList.ToArray()
};

OTA_CancelRS response = null;
Policy.Handle<SoapException>()
      .Or<WebException>()
      .WaitAndRetry(new[]
      {
          TimeSpan.FromSeconds(1),
          TimeSpan.FromSeconds(1),
          TimeSpan.FromSeconds(1),
          TimeSpan.FromSeconds(1),
          TimeSpan.FromSeconds(1),
          TimeSpan.FromSeconds(1),
          TimeSpan.FromSeconds(1),
          TimeSpan.FromSeconds(1),
          TimeSpan.FromSeconds(1)
      })
      .Execute(() =>
      {
          using (OTA_CancelService serviceObj = new OTA_CancelService())
          {
              serviceObj.MessageHeaderValue = msgHeader;
              serviceObj.Security = new Security1 { BinarySecurityToken = token };
              response = serviceObj.OTA_CancelRQ(request);
          }
});

コンパイルしてビルドしますが、まだテストしていません。:-)

ドキュメントで、次のリクエストを見つけました。

<OTA_CancelRQ Version="2.0.0">
  <Segment Type="entire"/>
</OTA_CancelRQ>

Web サービスが期待するオブジェクト モデルを使用してこれをエンコードするにはどうすればよいですか?

4

5 に答える 5

3

以下のように「entire」タイプを指定して、PNR の旅程全体をキャンセルできます。

<OTA_CancelRQ Version="2.0.0">
  <Segment Type="entire"/>
</OTA_CancelRQ>
于 2016-02-15T14:08:05.250 に答える
2

これが私のコードの c# のリクエスト部分です。これが OTA_CancelRQ のプロキシ クラスへの参照を追加するのに役立つことを願っています。

OTA_CancelRQ rq = new OTA_CancelRQ();
        List<OTA_CancelRQSegment> segmentCancelList = new List<OTA_CancelRQSegment>();
        OTA_CancelRQSegment segmentCancel = new OTA_CancelRQSegment();
        OTA_CancelRQSegmentType segmentType = new OTA_CancelRQSegmentType();
        segmentType = OTA_CancelRQSegmentType.entire;
        segmentCancel.Type = segmentType;
        segmentCancel.TypeSpecified = true;
        segmentCancelList.Add(segmentCancel);
        rq.Segment = segmentCancelList.ToArray();

ありがとう。

于 2016-02-17T06:56:18.673 に答える
0
cancelRQ.tPA_ExtensionsField = new CancelRequest.TPA_Extensions
            {
                segmentCancelField = new CancelRequest.TPA_Extensions.SegmentCancel
                {
                    typeField = "Entire"
                }
            };
于 2016-02-16T18:03:37.720 に答える