這次的這篇文章給大家分享的是php實現webservice(實測C#及java可調用),有需要的朋友可以參考一下
使用PHP搭建起一個其他語言如C#、JAVA可用的Webservice的方法與網上大多數所述的用PHP建立的webservice感覺是有差別的。對於介面的輸入參數及輸出參數較為複雜的情況下,這裡建議直接將輸入參數及輸出參數統一為XML string或者是Json string。這裡著重介紹的是怎麼實現一個webservice,而對於輸入輸出參數的格式,如何操作XML string就不多介紹,一搜一大把,但是要注意對於XML和json的話要注意參數的過濾和檢查。該文介紹的是帶wsdl檔案的webservice,no-wsdl的方式較為簡單,這裡不做介紹
檢查並開啟soap擴充
首先需要開啟soap擴充,即將php.ini檔案中的extension=php_soap.dll前的分號去掉然後重啟apache。查看phpinfo是否開啟soap。具體如何操作這裡跳過,實現webservice是需要soap擴充的。
在VS中建立C#的webservice
網上找到的php生產wsdl的方式類產生的wsdl檔案從而搭建的webservice只有php能用,簡直不要再坑了。所以這裡就以曲線救國的方式來產生wsdl檔案。先通過C#搭建一個webservice來產生wsdl,之後只要稍加更改就可以用了。
1.建立項目->ASP.NET Web應用程式建立一個工程;
2.b.右擊解決方案->添加->建立項選擇Web服務(ASMX);
3.編寫介面,注意C#中要發布出來的function前要加[WebMethod],其中可能還要建立一些類:
4.編寫完成按ctrl+F5運行出現如下所示,之後在url後面加上?wsdl會出現如所示的wsdl,另存新檔就可以了。
5.將產生的WSDL檔案中的<soap:address>裡的location改為PHP webservice的發布地址:
6.PHP編寫webservice介面:
7.發布webservice:
<?php/** * Created by PhpStorm. * User: Damon * Date: 2018/1/26 * Time: 11:16 *///引入自動載入require __DIR__ . '/vendor/autoload.php';$wsdlfile='MESWebService.wsdl';//wsdl檔案路徑$webserver = new \SoapServer($wsdlfile);$webserver->setClass(\Src\MESWebService::class);$webserver->handle();
注意,Web Service的方法在聲明時至多一個參數, 可是在調用該方法時就必須傳value1,value2兩個參數。(這一點十分令人費解,我的理解是,在調用該方法時,系統把所有參數都放到一個對象裡傳過來)。傳回值也很特別,不是直接返回$arry,而是把它放到一個對象裡再返回。傳回值中key值對應的是wsdl中的名稱。
使用C#進行調用測試
1.建立項目->ASP.NET Web應用程式建立一個工程,與前面的一樣;
2.右擊項目下面的引用->加入服務參考,點擊進階跳出服務引用設定,點擊裡面右下角的添加Web引用,出現如所示:
3.在URL中填入發布的webservice服務的地址,斷行符號後若正確出現,之後根據需求修改Web引用名後點擊添加引用:
4.然後右擊項目->添加->建立項,選擇web表單,編輯.aspx.cs檔案的內容。
5.e.最後按ctrl+F5運行可以查看到對應的輸出,如所示,說明php實現的webservice在C#中可以正確調用。