使用c#发送SOAP请求

时间:2009-04-16 08:53:42

标签: c# web-services soap c#-3.0 variable-initialization

我正在尝试向第三方Web服务发送SOAP请求。我已成功发送和接收来自同一服务中其他接口的数据,但我遇到了这个特殊问题:

<SP_GoodsMovement xmlns="http://services.hnseu.com">
  <GoodsMoved xmlns="http://tempuri.org/SP_GoodsMoved.xsd">
    <SerialNumberedGoodsMovements>
      <SerialNumbered>
        <PartNumber>string</PartNumber>
        <SerialNumber>string</SerialNumber>
        <MovementType>string</MovementType>
        <FromLocation>string</FromLocation>
        <FromLocationCategory>string</FromLocationCategory>
        <ToLocation>string</ToLocation>
        <ToLocationCategory>string</ToLocationCategory>
        <AssetMovementTimestamp>dateTime</AssetMovementTimestamp>
        <GoodsInReference>string</GoodsInReference>
      </SerialNumbered>
      <SerialNumbered>
        <PartNumber>string</PartNumber>
        <SerialNumber>string</SerialNumber>
        <MovementType>string</MovementType>
        <FromLocation>string</FromLocation>
        <FromLocationCategory>string</FromLocationCategory>
        <ToLocation>string</ToLocation>
        <ToLocationCategory>string</ToLocationCategory>
        <AssetMovementTimestamp>dateTime</AssetMovementTimestamp>
        <GoodsInReference>string</GoodsInReference>
      </SerialNumbered>
    </SerialNumberedGoodsMovements>
    <NonSerialNumberedGoodsMovements>
      <NonSerialNumbered>
        <PartNumber>string</PartNumber>
        <Quantity>unsignedInt</Quantity>
        <MovementType>string</MovementType>
        <FromLocation>string</FromLocation>
        <FromLocationCategory>string</FromLocationCategory>
        <ToLocation>string</ToLocation>
        <ToLocationCategory>string</ToLocationCategory>
        <Used>boolean</Used>
        <AssetMovementTimestamp>dateTime</AssetMovementTimestamp>
        <GoodsInReference>string</GoodsInReference>
      </NonSerialNumbered>
      <NonSerialNumbered>
        <PartNumber>string</PartNumber>
        <Quantity>unsignedInt</Quantity>
        <MovementType>string</MovementType>
        <FromLocation>string</FromLocation>
        <FromLocationCategory>string</FromLocationCategory>
        <ToLocation>string</ToLocation>
        <ToLocationCategory>string</ToLocationCategory>
        <Used>boolean</Used>
        <AssetMovementTimestamp>dateTime</AssetMovementTimestamp>
        <GoodsInReference>string</GoodsInReference>
      </NonSerialNumbered>
    </NonSerialNumberedGoodsMovements>
  </GoodsMoved>
</SP_GoodsMovement>

所以我的代码如下(如果有必要我可以扩展它):

...
if (requestType == "SP_GoodsMovement")
{
  GoodsMoved SOAP_GoodsMoved = new GoodsMoved();
  SOAP_GoodsMoved.SerialNumberedGoodsMovements[0].PartNumber = partNumber[0].InnerXml;
...
  string SOAPMessage;
  SOAPMessage = request.SP_GoodsMovement(header, SOAP_GoodsMoved).Message;
}

当我运行此代码时,我得到一个'对象引用没有设置为对象的实例'错误。

我认为我没有正确引用PartNumber参数,但我尝试了一些没有成功的事情。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

   SOAP_GoodsMoved.SerialNumberedGoodsMovements[0]

似乎没有初始化。

也许试试

   GoodsMoved SOAP_GoodsMoved = new GoodsMoved();
   SOAP_GoodsMoved.SerialNumberedGoodsMovements = new WhateverObject[1];
   SOAP_GoodsMoved.SerialNumberedGoodsMovements[0] = new WhateverObject();
   SOAP_GoodsMoved.SerialNumberedGoodsMovements[0].PartNumber = partNumber[0].InnerXml;

或者你可以对GoodsMoved()ctor进行重载,以确保SerialNumberedGoodsMovements数组以一定的大小进行初始化。