2012-07-19 112 views
0

我有一個程序正在使用外部Web服務。我需要在請求中發送的1個字段是DateTime字段,但它似乎永遠不會存在,即使我已將它與其他許多其他對象一起設置,並且它們傳遞正常。WCF請求中缺少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 ca n可以在https://api.tab.com.au/tabapi/services/betting?wsdl

有人能告訴我我哪裏出錯了嗎?我已經嘗試了很多不同的DataTime,但都有相同的缺失結果。

感謝 院長

+0

這很奇怪,因爲在WSDL中將meetingDate指定爲''。您是否在客戶端項目中刷新了服務,以便使用最新的WSDL? – 2012-07-19 08:40:48

回答

0

確保您在 「指定」 屬性設置爲true。

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

如果有一個可選的字段(即,一個其中minOccurs屬性是0),則代理包括「指定」屬性。除非您將其設置爲true,否則該字段不會添加到請求正文中。

+0

當然啊!謝謝RB,我們倆已經在這一整天主演過! – 2012-07-19 09:07:03