-2

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

$Client = new SoapClient(NULL, array('location' => 'http://ipaddress/onyx/api/soap_api.php', 'uri' => 'not-used'));

print_r($Client->qty_available('124044'));

/* 输出:数组([01] => 数组([可用] => 333 [名称] => 联盟)

4

2 回答 2

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>
于 2012-10-19T18:20:42.997 回答
0

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

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

于 2012-10-19T18:48:23.357 回答