2011-10-27 14 views
1

私は追跡しようとしている非常に奇妙なバグを持っています。私のコードでは、基本的なWebサービスを呼び出しています。複雑なタイプの特定のパラメータが表示されているという問題は、静的に設定しても、単に設定されていないという問題があります。複雑なタイプのパラメータがSoap Requestから欠落しています

コードのデバッグ時に、オブジェクトのプロパティが正しく設定されていることを確認しました。この問題は、SOAPリクエストを生成するときにのみ発生します。私は.netでビルトインされたWebサービスプロキシを使用してSOAPリクエストを生成しています(ビジュアルスタジオでWebサービスリファレンスを追加してください)

これについての助けがあれば幸いです。複合型OrderTransactionに設定されていない

要素は次のとおりです。 tracerId orderDateで updateTime

ここで私は見ています何の例です:

私は静的オブジェクト

を作成
orderArray[0] = new OrderTransaction(); 

このオブジェクトにパラメータを設定します。

orderArray[0].tracerId = 47; 

私のWebサービスを呼び出すと、このパラメータは複合型から完全に欠落しています。ここで

は、ここに私の複合型のXSD

<xs:complexType name="OrderTransaction"> 
<xs:sequence> 
    <xs:element minOccurs="0" name="cardType" type="xs:string" /> 
    <xs:element name="ccEncryptedFlag" type="xs:short" /> 
    <xs:element minOccurs="0" name="chainShortcode" type="xs:string" /> 
    <xs:element minOccurs="0" name="channelCode" type="xs:string" /> 
    <xs:element minOccurs="0" name="creditCardNumber" type="xs:string" /> 
    <xs:element minOccurs="0" name="custIdMigratedToRex" type="xs:dateTime" /> 
    <xs:element minOccurs="0" name="customerId" type="xs:long" /> 
    <xs:element minOccurs="0" name="customerName" type="xs:string" /> 
    <xs:element minOccurs="0" name="expirationMonth" type="xs:string" /> 
    <xs:element minOccurs="0" name="expirationYear" type="xs:string" /> 
    <xs:element minOccurs="0" name="orderDate" type="xs:dateTime" /> 
    <xs:element name="orderId" type="xs:long" /> 
    <xs:element minOccurs="0" name="provinceCode" type="xs:string" /> 
    <xs:element name="totalItemTransactions" type="xs:short" /> 
    <xs:element minOccurs="0" name="tracerId" type="xs:long" /> 
    <xs:element minOccurs="0" name="updateTime" type="xs:dateTime" /> 
</xs:sequence> 

の一例である私の現在のテストコードです:

  ZBatch_PublisherService.ItemTransaction[] itemArray = new ItemTransaction[1]; 
      ZBatch_PublisherService.OrderTransaction[] orderArray = new OrderTransaction[1]; 



      itemArray[0] = new ItemTransaction(); 
      itemArray[0].classId = 1153; 

      itemArray[0].fulfillmentCenterId = 123; 
      itemArray[0].fulfillmentType = "TEST"; 
      itemArray[0].lineItemId = 597; 

      itemArray[0].migratedFlag = 0; 

      itemArray[0].taxAmount = Convert.ToDecimal("7.00"); 
      itemArray[0].sku = "110853852"; 
      itemArray[0].quantity = 1; 
      itemArray[0].taxService = "CSS"; 
      itemArray[0].totalShippingAmount = Convert.ToDecimal("5.99"); 
      itemArray[0].tracerId = 47; 
      itemArray[0].trackingNo = "abc2134"; 
      itemArray[0].unitAmount = Convert.ToDecimal("79.99"); 
      itemArray[0].updateTime = Convert.ToDateTime("2011-10-27T17:47:30"); 


      orderArray[0] = new OrderTransaction(); 
      orderArray[0].tracerId = 47; 
      orderArray[0].customerId = 15; 
      orderArray[0].cardType = "VISA"; 
      orderArray[0].ccEncryptedFlag = 3; 
      orderArray[0].chainShortcode = "ABC"; 
      orderArray[0].creditCardNumber = "1234566788"; 
      orderArray[0].customerName = "John Doe"; 
      orderArray[0].expirationMonth = "APR"; 
      orderArray[0].expirationYear = "2014"; 
      orderArray[0].orderDate = Convert.ToDateTime("2011-10-27T17:47:30"); 
      orderArray[0].orderId = 343; 
      orderArray[0].provinceCode = "AB"; 
      orderArray[0].totalItemTransactions = 1; 
      orderArray[0].updateTime = Convert.ToDateTime("2011-10-27T17:47:30"); 

      ZBatch_PublisherService.ZBatchPublisherServiceService ws = new ZBatchPublisherServiceService(); 

      ws.saveBatch(orderArray, itemArray); 

答えて

3

私はこの同じ問題を持っていた問題がいくつかあることがわかりましたタイプはNULL可能ではありませんでした。したがって、実際にnullかどうかを確認するために、C#Webサービスに変数名に「Specified」という単語が追加された余分なフラグが付いています。すなわちtraceIdSpecified = true;

プロパティの値を設定するほかに、 '... Specified'プロパティをtrueに設定する必要があります。

これは私の問題を修正しました。

HTH

fdlane

+0

こんにちは、私はその言葉を追加しなければならない 'を指定という言葉を、理解していませんか?この修正プログラムの基本的なサンプルコードを提供できますか?ありがとう。 –

関連する問題