php實現webservice(實測C#及java可調用)

使用PHP搭建起一個其餘語言如C#、JAVA可用的Webservice的方法與網上大多數所述的用PHP創建的webservice感受是有差異的。對於接口的輸入參數及輸出參數較爲複雜的狀況下,這裏建議直接將輸入參數及輸出參數統一爲XML string或者是Json string。這裏着重介紹的是怎麼實現一個webservice,而對於輸入輸出參數的格式,如何操做XML string就很少介紹,一搜一大把,可是要注意對於XML和json的話要注意參數的過濾和檢查。該文介紹的是帶wsdl文件的webservice,no-wsdl的方式較爲簡單,這裏不作介紹php

檢查並開啓soap擴展

首先須要開啓soap擴展,即將php.ini文件中的extension=php_soap.dll前的分號去掉而後重啓apache。查看phpinfo是否開啓soap。具體如何操做這裏跳過,實現webservice是須要soap擴展的。web

在VS中創建C#的webservice

網上找到的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中的名稱。測試

使用C#進行調用測試

1.新建項目->ASP.NET Web應用程序創建一個工程,與前面的同樣;
2.右擊項目下面的引用->添加服務引用,點擊高級跳出服務引用設置,點擊裏面右下角的添加Web引用,出現以下圖所示:
圖片描述ui

3.在URL中填入發佈的webservice服務的地址,回車後若正確出現下圖,以後根據需求修改Web引用名後點擊添加引用:
圖片描述
4.而後右擊項目->添加->新建項,選擇web窗體,編輯.aspx.cs文件的內容。
圖片描述
圖片描述
5.e.最後按ctrl+F5運行能夠查看到對應的輸出,以下圖所示,說明php實現的webservice在C#中能夠正確調用。
圖片描述url

相關文章
相關標籤/搜索