从VB .NET填充SOAP更新的问题

时间:2014-10-29 06:54:06

标签: .net vb.net web-services soap

我在填写Web服务更新项时遇到问题

<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类。 我做了什么。

  1. 传递凭据确定
  2. 传递更新请求,记录了测试用户已更新的Web服务(未包括来自Option命名空间的填充数据)
  3. 我需要帮助填写选项部分。我试过的代码如下

    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
    

    这没有用。

    所有这样尝试使用发送upodate的使用命令,但那里已经填充的选项。 像这样:

    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"
    

    我对代码很新,所以如果缺少某些相关信息,请询问。

    感谢您提供任何帮助

2 个答案:

答案 0 :(得分:0)

此代码:

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

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

答案 1 :(得分:0)

<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的1维数组' 是Dim Options As New 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