以下是我从客户那里收到的有关如何从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] =>联盟 )
答案 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