在VB.Net中使用PHP Web服务

时间:2012-10-19 17:54:53

标签: php asp.net vb.net web-services

以下是我从客户那里收到的有关如何从PHP访问其Web服务的代码。我需要从VB.Net做同样的事情。没有可用的WSDL,这是我从中获得的所有代码。这甚至可能吗?

$ Client = new SoapClient(NULL,数组(' location' =>' http://ipaddress/onyx/api/soap_api.php',' uri& #39; =>'未使用'));

的print_r($客户端 - > qty_available(' 124044'));

/ *输出:    排列    (    [01] =>排列      (        [available] => 333        [name] =>联盟      )

2 个答案:

答案 0 :(得分:0)

如果返回的数据是自定义格式(我从问题中猜到这一点),那么默认的Web服务内容可能无法在.Net中运行,您必须手动从请求中获取数据并进行解析它基于服务返回的内容。如果它是标准XML,您可能必须获取一次原始数据才能自己创建WSDL。

以下是我们用来测试我们的.Net Web服务的控制台应用程序中的一些代码。基本上它发出请求并返回原始数据。您可以运行一次以获取返回的数据,然后编写代码来解析数据。我用我们问题中的值替换了我们的值。

Module Module1

Sub Main()


    Dim x = System.Net.HttpWebRequest.Create("http://ipaddress/onyx/api/soap_api.php")

    x.Method = "POST"

    Dim MemStream As New System.IO.MemoryStream

    Dim ReqData As New IO.StreamWriter(MemStream, System.Text.Encoding.UTF8)
    ReqData.Write(My.Resources.Test2)
    ReqData.Flush()

    x.ContentLength = MemStream.Length
    x.ContentType = "text/xml; charset=utf-8"
    x.Headers.Add("SOAPAction", "not-used")

    Dim WebReq = x.GetRequestStream
    WebReq.Write(MemStream.GetBuffer, 0, MemStream.Length)
    WebReq.Flush()
    WebReq.Close()

    Dim Res As System.Net.HttpWebResponse = x.GetResponse

    If Res.StatusCode = Net.HttpStatusCode.OK Then
        Dim SR = New IO.StreamReader(Res.GetResponseStream)
        Console.WriteLine(SR.ReadToEnd)
    Else
        Console.WriteLine(Res.StatusCode & ", " & Res.StatusDescription)
    End If

    Console.ReadLine()

End Sub

End Module

`My.Resources.Test2'是我们使用的预格式化请求数据。以下是您的情况的可能示例,它可能不正确。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
    <qty_available>
         124044
    </qty_available>
</soap:Body>
</soap:Envelope>

答案 1 :(得分:0)

可能有50种不同的方法可以解决这个问题,但如果您无法从客户那里获得一些基本文档,那么它们都涉及开发某种元数据。以下链接有帮助吗?

http://framework.zend.com/manual/1.12/en/zend.soap.autodiscovery.html