使用PHP搭建起一個其餘語言如C#、JAVA可用的Webservice的方法與網上大多數所述的用PHP創建的webservice感受是有差異的。對於接口的輸入參數及輸出參數較爲複雜的狀況下,這裏建議直接將輸入參數及輸出參數統一爲XML string或者是Json string。這裏着重介紹的是怎麼實現一個webservice,而對於輸入輸出參數的格式,如何操做XML string就很少介紹,一搜一大把,可是要注意對於XML和json的話要注意參數的過濾和檢查。該文介紹的是帶wsdl文件的webservice,no-wsdl的方式較爲簡單,這裏不作介紹php
首先須要開啓soap擴展,即將php.ini文件中的extension=php_soap.dll前的分號去掉而後重啓apache。查看phpinfo是否開啓soap。具體如何操做這裏跳過,實現webservice是須要soap擴展的。web
網上找到的php生產wsdl的方式類生成的wsdl文件從而搭建的webservice只有php能用,簡直不要再坑了。因此這裏就以曲線救國的方式來產生wsdl文件。先經過C#搭建一個webservice來生成wsdl,以後只要稍加更改就能夠用了。apache
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:json
<?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中的名稱。測試
1.新建項目->ASP.NET Web應用程序創建一個工程,與前面的同樣;
2.右擊項目下面的引用->添加服務引用,點擊高級跳出服務引用設置,點擊裏面右下角的添加Web引用,出現以下圖所示:
ui
3.在URL中填入發佈的webservice服務的地址,回車後若正確出現下圖,以後根據需求修改Web引用名後點擊添加引用:
4.而後右擊項目->添加->新建項,選擇web窗體,編輯.aspx.cs文件的內容。
5.e.最後按ctrl+F5運行能夠查看到對應的輸出,以下圖所示,說明php實現的webservice在C#中能夠正確調用。
url