Soap请求中缺少复杂类型的参数

本文关键字:类型 参数 复杂 请求 Soap | 更新日期: 2023-09-27 18:12:32

我有一个非常奇怪的bug,我正在试图追踪。在我的代码中,我调用了一个基本的web服务。问题是,我看到复杂类型中的某些参数根本没有被设置,即使我静态地设置它们。

在调试代码时,我已经验证了对象的属性是正确设置的,这个问题只在我生成soap请求时发生。我通过使用内置的web服务代理在。net生成soap请求(在visual studio中添加web服务引用)

任何帮助都是非常感谢的。

没有在复杂类型OrderTransaction中设置的元素有:tracerId向数据库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);

Soap请求中缺少复杂类型的参数

我有同样的问题,发现问题是某些类型不可为空。因此,为了判断它是否实际上是空的,c# web服务有一个额外的标志,变量名加上单词"指定"。即traceIdSpecified = true;

除了设置属性的值外,还必须设置"…"

这个修复了我的问题。

hth

fdlane