Vb.net 将 xml 发送到 Web 服务

时间:2021-01-03 18:35:58

标签: xml vb.net soap

我想将 xml 发送到 Web 服务 xml看起来像这样

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header/>
    <soap:Body>
    <OTA_HotelRatePlanRQ Version="2.1" PrimaryLangID="en-us" TimeStamp="2001-12-17T09:30:47Z" xmlns="http://www.opentravel.org/OTA/2003/05">
    <POS>
    <Source>
    <RequestorID ID="aa" MessagePassword="bb" Type="cc">
    <CompanyName Code="C" CodeContext="dd"/>
    </RequestorID>
    </Source>
    </POS>
    </OTA_HotelRatePlanRQ>
    </soap:Body>
    </soap:Envelope>

我知道我可以手动构建 xml,但是有简单的方法吗? 例如

Web 服务名为 webs_test 所以在 vb.net 我写

  Dim trip As New webs_test.OTA_HotelRatePlanRQ
  trip.POS.Source.RequestorID.ID = "aa"
  trip.POS.Source.RequestorID.MessagePassword = "bb"
  trip.POS.Source.RequestorID.Type = "cc"
  trip.POS.Source.RequestorID.CompanyName.Code = "C"
  trip.POS.Source.RequestorID.CompanyName.CodeContext = "dd"

从这里开始,有没有一种简单的方法来构建 xml 并发送到 Web 服务?

谢谢

2 个答案:

答案 0 :(得分:0)

假设此服务位于 http://someserver.com/Some.svc 并且它导出一个 WSDL 来描述它自己在 http://someserver.com/Some.svc?WSDL,您右键单击您的解决方案资源管理器引用节点,您选择添加服务引用,然后您粘贴 WSDL URL(或者甚至是非 WSDL URL;尝试在末尾添加 ?WSDL 就足够聪明了)。稍后点击几下并选择命名,您就可以编写如下所示的代码:

Dim x as New SomeServiceNamespace.SomeClient()

x.GetRatePlan("aa", "bb", "cc", "C", "dd") 'method name comes from the WSDL

剩下的就交给它了..

顺便说一句,如果服务没有描述自己,并不意味着一切都丢失了;一些 Web 服务提供商关闭了服务本身的 WSDL 生成,但他们愿意向您提供服务发送的相同 WSDL,作为 XML 文件。在这种情况下,把它放在例如c:\temp 并在 Add Service reference.. 对话框中,将 c:\temp\the_wsdl_filename.xml 放入地址框中

答案 1 :(得分:0)

我使用 Xml linq 来做:

Imports System.Xml
Imports System.Xml.Linq
Module Module1

    Sub Main()
        Dim soap As String = _
            "<soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">" & _
                "<soap:Header/>" & _
                "<soap:Body>" & _
                    "<OTA_HotelRatePlanRQ Version=""2.1"" PrimaryLangID=""en-us"" TimeStamp=""2001-12-17T09:30:47Z"" xmlns=""http://www.opentravel.org/OTA/2003/05"">" & _
                        "<POS>" & _
                            "<Source>" & _
                                "<RequestorID ID=""aa"" MessagePassword=""bb"" Type=""cc"">" & _
                                    "<CompanyName Code=""C"" CodeContext=""dd""/>" & _
                                "</RequestorID>" & _
                            "</Source>" & _
                        "</POS>" & _
                    "</OTA_HotelRatePlanRQ>" & _
                "</soap:Body>" & _
            "</soap:Envelope>"

        Dim envelope As XElement = XElement.Parse(soap)
        Dim now As DateTime = DateTime.Now
        Dim id As String = "John"
        Dim password As String = "apple"
        Dim type As String = "123"
        Dim company = "XYZ"
        Dim codeContext = "STU"

        Dim ota As XElement = envelope.Descendants().Where(Function(x) x.Name.LocalName = "OTA_HotelRatePlanRQ").FirstOrDefault()
        Dim ns As XNamespace = ota.GetDefaultNamespace()
        ota.SetAttributeValue("TimeStamp", now.ToString("D"))

        Dim requestorID As XElement = ota.Descendants(ns + "RequestorID").FirstOrDefault()
        requestorID.SetAttributeValue("ID", id)
        requestorID.SetAttributeValue("MessagePassword", password)
        requestorID.SetAttributeValue("Type", type)

        Dim companyName As XElement = requestorID.Element(ns + "CompanyName")
        companyName.SetAttributeValue("Code", company)
        companyName.SetAttributeValue("CodeContext", codeContext)



    End Sub

End Module