php

PHP 或是VB.NET呼叫WEB SERVICE使用

最近因為需要 所以來玩了一下WEBSERVICE

他就像是一個API一樣 你傳參數給他 他就會回傳你資料。
首先 先來看PHP的寫法
PHP的話 你必須要先在PHP.ini把php_soap.dll這個ext啟用才可以使用soap

你如果要使用webservice的話 你應該會有個像是
http://webservices.studyhost.com/ZipCodeWebService.asmx?op=GetAllAreaByCity
這樣的頁面
他會跟你說 你必須要傳

POST /ZipCodeWebService.asmx HTTP/1.1
Host: webservices.studyhost.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/GetAllAreaByCity"

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

給他
然後他就會回傳一個帶有資料的xml還你

php的語法就是

<?php
$url = "http://webservices.studyhost.com/ZipCodeWebService.asmx?WSDL";
$client = new SoapClient($url);
$result = $client->Report2( '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetAllAreaByCity xmlns="http://tempuri.org/">
      <City>string</City>
    </GetAllAreaByCity>
  </soap:Body>
</soap:Envelope>' );
$result = $client->Report2(array('City' => '台中市'));
var_dump($result);
echo $result->CelsiusToFahrenheitResult . "n";
?>

這樣就可以了

註:php 要把extension=php_soap.dll 這個打開才行

VB.NET的話 倒是很不一樣的做法

首先你必須要先到工具列去 然後 加入WEB參考

(vs2013是在工具列->加入服務參考->進階->加入web參考這邊

URL就要打你的WEBSERVICE的URL 例如http://webservices.studyhost.com/ZipCodeWebService.asmx

你就會看到WEB參考會給你一個名稱 例如com.studyhost.webservices 而這個其實你是可以自由修改的

webservice

接下來就是程式碼的部分了

[CODE]
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
‘建立 Web Services
Dim ZipCode As New com.studyhost.webservices.WebService
Dim Cities As Array ‘儲存城市名稱用的陣列

Cities = ZipCode.GetAllAreaByCity(“台中市”) ‘從遠端取得所有的城市名稱

Me.ComboBox1.Items.Clear() ‘清空 ComboBox1
For i As Integer = LBound(Cities) To UBound(Cities) ‘填入 ComboBox1
Me.ComboBox1.Items.Add(Cities(i))
Next

End Sub

End Class

[/CODE]

像這樣就可以了,當然你必須要先在你的FORM上面先放置一個ComboBox1跟Button1 才行

其實很簡單不難,難在於找不到人稍微教你一下 或是像這樣的範例而已…

Be the First to comment.

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

(若看不到驗證碼,請重新整理網頁。)