-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'));

/* 出力: Array ( [01] => Array ( [available] => 333 [name] => Alliance )

4

2 に答える 2

0

返されるデータがカスタム形式の場合 (質問から推測しています)、デフォルトの Web サービスは .Net で機能しない可能性があります。リクエストから手動でデータを取得し、それに基づいて解析する必要があります。サービスが返すもの。標準 XML の場合は、WSDL を自分で作成するためだけに生データを一度取得する必要がある場合があります。

以下は、.Net Web サービスの 1 つをテストするために使用したコンソール アプリのコードです。基本的には、リクエストを作成して生データを返します。これを 1 回実行して、返されたデータを取得し、データを解析するコードを記述できます。私たちの価値観をあなたの質問の価値観に置き換えました。

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 に答える