【问题标题】:Problems filling SOAP update from VB .NET从 VB .NET 填充 SOAP 更新时出现问题
【发布时间】:2014-10-29 06:54:05
【问题描述】:

我在填写 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 命名空间的填充数据)

我需要帮助来填写选项部分。我尝试过的代码如下

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

这没用。

所有尝试都没有使用确实发送更新但已填充的选项的命令。 像这样:

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"

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

感谢您的帮助

【问题讨论】:

  • 您需要将Options 对象分配给父对象,如下所示:Update.Options = Options。否则,即使您创建了 Options 对象并填写了它,它也不会通过网络发送,因为它不包含在父对象中。

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


【解决方案1】:

这段代码:

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

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

【讨论】:

    【解决方案2】:
    <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 次,所以它是一个数组? 当我尝试像这样将 vlue 放入该字段时 CustomNamespace.EndingOption = 选项 它给出了“CustomNamespace.OptionType”类型的错误值不能转换为“CustomNamespace.OptionType 的一维数组” 是 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
    

    【讨论】:

      猜你喜欢
      • 2011-06-17
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 2011-01-08
      • 2013-11-26
      • 1970-01-01
      相关资源
      最近更新 更多