1

外部 Web サービスを使用するプログラムがあります。リクエストで送信する必要があるフィールドの 1 つは DateTime フィールドですが、同じオブジェクト内の他の多くのフィールドと一緒に設定しても存在しないようで、正常に渡されます。

メッセージインスペクタを配置して、送信内容を確認しました。リクエストは次のとおりです。

  <bettingRequest xmlns="">
    <accountPin>0</accountPin>
    <betDetailsRequestList>
      <acceptPartial>0</acceptPartial>
      <accumulatorBet>false</accumulatorBet>
      <accumulatorId>0</accumulatorId>
      <allUpFormula>0</allUpFormula>
      <betAmountList>
        <amountInvested>25</amountInvested>
        <returnsPerBet>0</returnsPerBet>
      </betAmountList>
      <betRefId>0</betRefId>
      <betType>Parimutuel</betType>
      <scheduledType>1</scheduledType>
      <fixedOddsProdCode>0</fixedOddsProdCode>
      <flexiBet>false</flexiBet>
      <legList>
        <prodCode>1</prodCode>
        <propositionNumber>0</propositionNumber>
        <raceNumber>2</raceNumber>
        <selectionList>
          <selectionName>TIM FIN</selectionName>
          <selectionNumber>6</selectionNumber>
          <selectionSeparator />
        </selectionList>
      </legList>
      <mystery>false</mystery>
      <notifyMethod>0</notifyMethod>
      <numMultiParlayBet>0</numMultiParlayBet>
      <ordinalNumber>1</ordinalNumber>
      <meetingCode>13</meetingCode>
    </betDetailsRequestList>
  </bettingRequest>

そして、これがそれを作成するものです:

        bettingRequest betReq = new bettingRequest();
        betDetailsReq betDetReq = new betDetailsReq();

        List<legDetailsReq> leglist = new List<legDetailsReq>();
        List<betSelection> sellist = new List<betSelection>();
        List<betAmount> betamtlist = new List<betAmount>();
        List<betDetailsReq> betdetaillist = new List<betDetailsReq>();

        betSelection sel = new betSelection();
        sel.selectionNumber = selection.ToString();
        sel.selectionName = Runner;
        sel.selectionSeparator = "";
        sellist.Add(sel);

        legDetailsReq leg = new legDetailsReq();
        leg.prodCode = 1;
        leg.propositionNumber = 0;
        leg.raceNumber = racenum;
        leg.selectionList = sellist.ToArray();
        leglist.Add(leg);

        betAmount betAmt = new betAmount();
        betAmt.amountInvested = betamt;
        betAmt.returnsPerBet = "0";
        betamtlist.Add(betAmt);

        betDetReq.betType = "Parimutuel";
        betDetReq.betAmountList = betamtlist.ToArray();
        betDetReq.legList = leglist.ToArray();
        betDetReq.allUpFormula = "0";
        betDetReq.acceptPartial = 0;
        betDetReq.accumulatorBet = false;
        betDetReq.betRefId = 0;
        betDetReq.scheduledType = 1;
        betDetReq.fixedOddsProdCode = 0;
        betDetReq.flexiBet = false;
        betDetReq.mystery = false;
        betDetReq.notifyMethod = 0;
        betDetReq.ordinalNumber = 1;
        betDetReq.meetingCode = meetingcode;
        betDetReq.meetingDate = DateTime.Now;
        betdetaillist.Add(betDetReq);

        betReq.betDetailsRequestList = betdetaillist.ToArray();
        bettingResponse resp = bet.validateBet(meta, betReq);

シリアライゼーションのコードは次のとおりです。

    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=11)]
    public System.DateTime meetingDate {
        get {
            return this.meetingDateField;
        }
        set {
            this.meetingDateField = value;
            this.RaisePropertyChanged("meetingDate");
        }
    }

欠落している属性は betDetReq.meetingDate です。WSDL はhttps://api.tab.com.au/tabapi/services/betting?wsdlで表示できます。

誰かが私が間違っているところを教えてもらえますか? 私は DataTime のさまざまなバリエーションを試しましたが、すべて同じ結果が得られませんでした。

ありがとうディーン

4

1 に答える 1

3

「指定済み」プロパティがtrueに設定されていることを確認してください。

betDetReq.meetingDate = DateTime.Now;
betDetReq.meetingDateSpecified = true;

オプションのフィールド(つまり、minOccurs属性がであるフィールド0)がある場合、プロキシには「指定された」プロパティが含まれます。これをtrueに設定しない限り、フィールドはリクエスト本文に追加されません。

于 2012-07-19T08:44:58.477 に答える