问题从VB .NET

问题描述:

填充SOAP更新我有问题从VB .NET

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="https://XXXXXX"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ns:UpdateRequest> 
     <ns:ID>112</ns:ID> 
     <ns:UpdateUsername>Testing User</ns:UpdateUsername> 
     <ns:UpdateTime>2014-01-01T14:01:59.123</ns:UpdateTime> 
     <!--1 to 100 repetitions:--> 
     <ns:Option> 
      <ns:UpdateID>1234</ns:UpdateID> 
      <ns:OptionID>1</ns:OptionID> 
      <ns:Status>Progress</ns:Status> 
      <ns:EndDate>2015-01-01T14:01:59.123</ns:EndDate> 
     </ns:Option> 
     </ns:UpdateRequest> 
    </soapenv:Body> 
</soapenv:Envelope> 

我从WDSL和XSD文件创建的VB类问题灌装Web服务更新的项目。 我能做些什么。

  1. 凭据传递OK
  2. 通行证更新请求,Web服务记录与测试用户已经更新(didnt包括填充从选项命名空间数据)

我需要填补这一选项部分的帮助。我试过的代码如下

Dim Update As New CustomNamespace.UpdateRequestType 
      CustomNamespace.ID = "112" 
      CustomNamespace.UpdateUsername = "Testing User" 
      CustomNamespace.UpdateTime = "2014-01-01T14:01:59.123" 

      Using New System.ServiceModel.OperationContextScope(CustomNamespace) 
       Dim Options As New CustomNamespace.OptionType 
       Options.UpdateID= "1234" 
       Options.EndDate = "2015-01-01T14:01:59.123" 
       Options.Status = "Progress" 
       Options.OptionID = "1" 
      End Using 

这没有工作。

所有这样tryed无出使用发送upodate的命令,但已填充wasent的选项。 像这样:

Dim Update As New CustomNamespace.UpdateRequestType 
      CustomNamespace.ID = "112" 
      CustomNamespace.UpdateUsername = "Testing User" 
      CustomNamespace.UpdateTime = "2014-01-01T14:01:59.123" 
Dim Options As New CustomNamespace.OptionType 
      Options.UpdateID= "1234" 
      Options.EndDate = "2015-01-01T14:01:59.123" 
      Options.Status = "Progress" 
      Options.OptionID = "1" 

Im相当新的代码,所以如果一些相关的信息丢失,请询问。

感谢自带

+0

您需要将'Options'对象分配给父对象,如下所示:'Update.Options = Options'。否则,即使创建了“选项”对象并填充它,它也不会通过网络发送,因为它不包含在父对象中。 – Tim 2014-10-29 06:58:30

此代码的任何帮助:

Dim Options As New CustomNamespace.OptionType 
Options.UpdateID= "1234" 
Options.EndDate = "2015-01-01T14:01:59.123" 
Options.Status = "Progress" 
Options.OptionID = "1" 

创建CustomNamespace.OptionType类的新实例,但它有父CustomNamespace.UpdateRequestType类没有关系。 CustomNamespace.UpdateRequestType类是您通过服务发送的内容,因此您需要将CustomNamespace.OptionType分配给父级,以便将其包含在发送的内容中。

在没有看到WSDL或XSD文件,最有可能的(基于消息的格式),我预计CustomNamespace.UpdateRequestType类有一个属性是这样的:

Public Option As CustomNamespace.OptionType 

也就是说你会想物业将选项类的实例分配给。您创建的CustomNamespace.OptionType一个实例后,您这样做:

Update.Options = Option 

鉴于元素(选项),这是可能的,它是一个数组,而不是单一实例的命名,但是这应该指向你在正确的方向。

<xsd:element type="tns:UpdateRequestType" name="UpdateRequest"/> 
<xsd:element type="tns:UpdateResponseType" name="UpdateResponse"/> 
<xsd:element type="xsd:string" name="UpdateFault"/> 
<xsd:element type="tns:OptionType" name="Option"/> 
-<xsd:complexType name="UpdateRequestType"> 
-<xsd:sequence> 
<xsd:element type="xsd:int" name="CustomerID"/> 
<xsd:element type="xsd:string" name="UpdateUsername"/> 
+<xsd:element type="xsd:string" name="UpdateTime"> 
<xsd:element maxOccurs="100" minOccurs="1" ref="tns:Option"/> 
</xsd:sequence> 
</xsd:complexType> 
+<xsd:complexType name="UpdateResponseType"> 
-<xsd:complexType name="OptionType"> 
-<xsd:sequence> 
<xsd:element type="xsd:int" name="UpdateID"/> 
<xsd:element type="xsd:int" name="OptionID"/> 
<xsd:element type="xsd:int" name="Status"/> 
-<xsd:element type="xsd:string" name="EndDate"> 
-<xsd:annotation> 
<xsd:documentation>Date format YYYY-MM-DD</xsd:documentation> 
</xsd:annotation> 
</xsd:element> 
</xsd:sequence> 
</xsd:complexType> 

这是xsd文件中的代码。该选项的字段最多可以显示100次,因此它是一个数组? 当我尝试把这个字段像这样 CustomNamespace.EndingOption =选项 它给出错误类型'CustomNamespace.OptionType'的值无法转换为'CustomNamespace.OptionType'的一维数组' 是那个Dim Options As新的CustomNamespace.OptionType行错误,应该有()数组或什么。 课堂已经从文件创建具有这些领域如下

类:UpdateRequestType

Private OptionField() As OptionType 

有一切让自己的类

'''<remarks/> 
     <System.Xml.Serialization.XmlElementAttribute("Option")> _ 
     Public Property Option() As OptionType() 
      Get 
       Return Me.OptionField 
      End Get 
      Set 
       Me.OptionField = value 
      End Set 
     End Property 
    End Class