Ⅰ php怎麼生成wsdl文件
辦法有兩種:
1.zend studio生成
對於zend studio 9之前的版本貌似直接生成:
File ->New -> Other-> Webservice-> WSDL
對於zend studio 9需要安裝wsdl插件:
1、打開zendstudio9,選擇help(幫助)->welcome
2、在右邊的列表中找到WSDL Support,勾選
3、點擊Apply changes(應用修改)
4、zde會自動安裝,然後提示要重啟,點擊restart now(現在重新啟動)
wsdl支持安裝完畢,下面我們來生成一個wsdl文件,步驟如下:
1、選擇保存wsdl的項目文件夾
2、右鍵-new(新建)->other(其他)
3、在彈出的對話框中選擇web services,在下級菜單中選擇WSDL file,點擊next進入下一步
4、命名你的wsdl文件,點擊next進入下一步
5、修改target namespace(目標名稱空間),其他不變,點擊finish。
2.利用SoapDiscovery.class.php生成
Ⅱ PHP如何調用webservice
最近工作中需要用php調用webservice介面,對php不熟,上網搜搜,發現關於用php調用webservice的文章也不多,不少還是php4里用nusoap這個模塊調用的方法,其實php5里已經包含了處理soap的模塊,但是資料太少了,上php官網上查幫助,寫的不是很容易理解,經過多次實踐,終於搞清楚了,php調用webservice還是非常簡單的。下面用一個例子說明:
webservice服務是查詢QQ用戶是否在線
使用php5開發客戶端:
<?php
try{
//$client=newSoapClient("HelloService.wsdl",array('encoding'=>'UTF-8'));
$client=newSoapClient("webservices/qqOnlineWebService.asmx?wsdl");
var_mp($client->__getFunctions());
print("<br/>");
var_mp($client->__getTypes());
print("<br/>");
classqqCheckOnline{
var$qqCode="10000";
};
$arrPara=array(newqqCheckOnline);
$arrResult=$client->__Call("qqCheckOnline",$arrPara);//$client->qqCheckOnline($arrPara);
echo$arrResult->qqCheckOnlineResult."<br/>";
}catch(SOAPFault$e){
print$e;
}
?>
代碼確實很簡單吧,創建SoapClient對象時,可以使用保存在本地WSDL文件,也可以使用遠程的地址,後面的array數組里可以帶上很多的參數,具體參數可以查php的SoapClient幫助,這里帶的是字元集編碼,如果調用方法的參數里有中文,一定要指定字元集編碼,否則會出錯。
調用webservice前可以先調用SoapClient的__geunctions()和__getTypes()方法看一下你要調用的webservice暴露的方法,參數和數據類型,需要注意的是傳入的參數名一定要和soapclient裡面定義的一致,否則參數是傳不過去的。
需要使用SoapClient的__soapCall()或__call()方法,具體使用方法可以查php的幫助文檔。如果參數要求是一個結構體,請用類代替,如上面的代碼。
另外發現個問題,如果webservice方法返回的是xml格式的字元串,php接收到以後會自己把數據內容解析出來,而不是xml字元串.
Ⅲ 高分求java實現SAOP、WSDl用法例子(最好是電信與sp之間通信的例子)
當我們用web service對外提供介面服務的時候,可能很多介面會返回復雜類型,比如數組; 在此次利用.Net下面WCF和我們ASSP API【Alisoft SaaS Platform API】進行聯調的時候,就發現了問題;如果要想讓通過WSDL發布的web service具有最大化的兼容性,最好是參考WS-I【Web Services Interoperability】標准,而不要僅僅局限於SOAP標准;以下就返回數組的問題進行下探討;
ASSP API介面之一為getUsingUser,返回的對象為數組,數組元素也為復雜對象SimpleUserInfo,其中包括兩個屬性userId和userName;在WSDL聲明此type的時候默認採用的是soapenc:Array的方式,這也是SOAP規范中的方式;其聲明部分如下:
<xs:complexType name="ArrayOfSimpleUserInfo">
<xs:complexContent>
<xs:restriction base="soapenc:Array">
<xs:attribute ref="soapenc:arrayType" wsdl:arrayType="ns1:SimpleUserInfo[]"></xs:attribute>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
該聲明方式在和大部分的客戶端語言聯調時沒有問題,比如Java、.Net WSE 2.0、.Net WSE 3.0、Php;但是在利用WCF進行聯調時就出現了問題,其表現為:1)在vs2008中通過Add Service Reference添加服務時不成功,生成的代理類為空;2)若通過命令行工具Svcutil生成,提示不成功,但能看到錯誤信息,提示如下:
System.ServiceModel.Description.
錯誤: 引用類型「http://schemas.xmlsoap.org/soap/encoding/:Array」僅對編碼的SOAP 有效。
經查,出現以上問題就是由於soapenc:Array的聲明方式所導致,SOAP規范中的這種方式兼容性很不好,這點在WS-I BP【WS-I Basic Profile】中有過重點說明;後修改成unbounded模式後測試通過,修改後的聲明方式為:
<xs:complexType name="ArrayOfSimpleUserInfo">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="SimpleUserInfo" nillable="true" type="ns1:SimpleUserInfo" />
</xs:sequence>
</xs:complexType>
soapenc:Array的問題解決之後,WCF環境下的聯調並沒有完全成功,還差一點點;WSDL聲明修改之後,vs2008中添加服務引用正常了,調用服務端ws也正常了,在responseXml中返回了正常的結果,但是WCF對responseXml解析出來的結果卻有問題,userId為null,userName正常,難道userId的信息丟掉了!後經MS人員查證之後是由於WSDL中聲明SimpleUserInfo中屬性信息和soap responseXml中屬性信息的先後順序不一致所導致!為了不讓ISV修改客戶端生成的代碼,所以只好修改了服務端WSDL中userId、userName兩者的順序,之後問題全部解決;
總結下,雖然說web service說是完全跨平台的,但在實際開發過程中還是會出現很多的不兼容問題,這不僅僅是由於開發人員的代碼編寫上,連某些標准規范都是有瑕疵的,並不是說遵循了SOAP標准規范就沒有任何問題了,至於這點,大家可以多參考WS-I標准,他裡面指出了很多能夠保證最大化兼容性的措施和方法,這會非常有用;
Ⅳ php如何調用webservice的帶兩個參數的遠程方法
這是給出來的說明
你請求這個地址就行了,在地址後加?WSDL
然後再請求web service里提供給你的方法,傳進去需要的參數
方法的返回值就是你需要的數據
第一步:支持asp
win98要安裝pws!但我們談論的是如何使win2000支持!只要你在安裝win2000的時候使用的是完全安裝!那麼iis就安裝好了,有了iis就支持asp了!如果沒有安裝iis!那麼請在控制面板裡面點擊「添加/刪除程序」裡面的」添加/刪除組件「安裝iis!
第二步:支持php
首先下載一個php解析軟體!安裝PHP。執行下載到硬碟裡面的php-4.3.0-installer.exe 安
裝提示,我們回車就可以。選擇PHP路徑,沒有太大的影響的話,一般不要更改(默認c:\),填寫郵件伺服器,一般是LOCALHOST,還有發送的電子郵件信箱。
Ⅳ PHP如何調用webservice,知道的高手進
SOAP的WebService是可以直接使用的,php有支持SoapClient的,用起來很容易
<?php
$wsdl = "http://192.168.1.2/jaxws/services/test?wsdl";
$client = new SoapClient($wsdl);
$param = array('arg0'=>'arg0','arg1'=>'arg1');
$ret = $client->getUserinfoByID($param);
if ($ret->return){
print_r($ret->return);
}else{
echo 'no user';
}
具體SoapClient需要php的soap支持,看phpinfo里有soap的話就可以了,比如這樣:
soap
Soap Client enabled
Soap Server enabled
Directive Local Value Master Value
soap.wsdl_cache 1 1
soap.wsdl_cache_dir /tmp /tmp
soap.wsdl_cache_enabled 1 1
soap.wsdl_cache_limit 5 5
soap.wsdl_cache_ttl 86400 86400
Ⅵ php webservice是什麼
一言以蔽之:WebService是一種跨編程語言和跨操作系統平台的遠程調用技術。
所謂跨編程語言和跨操作平台,就是說服務端程序採用java編寫,客戶端程序則可以採用其他編程語言編寫,反之亦然!跨操作系統平台則是指服務端程序和客戶端程序可以在不同的操作系統上運行。
所謂遠程調用,就是一台計算機a上的一個程序可以調用到另外一台計算機b上的一個對象的方法,譬如,銀聯提供給商場的pos刷卡系統,商場的POS機轉賬調用的轉賬方法的代碼其實是跑在銀行伺服器上。再比如,amazon,天氣預報系統,淘寶網,校內網,網路等把自己的系統服務以webservice服務的形式暴露出來,讓第三方網站和程序可以調用這些服務功能,這樣擴展了自己系統的市場佔有率,往大的概念上吹,就是所謂的SOA應用。
其實可以從多個角度來理解WebService,從表面上看,WebService就是一個應用程序向外界暴露出一個能通過Web進行調用的API,也就是說能用編程的方法通過Web來調用這個應用程序。我們把調用這個WebService的應用程序叫做客戶端,而把提供這個WebService的應用程序叫做服務端。從深層次看,WebService是建立可互操作的分布式應用程序的新平台,是一個平台,是一套標准。它定義了應用程序如何在Web上實現互操作性,你可以用任何你喜歡的語言,在任何你喜歡的平台上寫Web service ,只要我們可以通過Web service標准對這些服務進行查詢和訪問。
WebService平台需要一套協議來實現分布式應用程序的創建。任何平台都有它的數據表示方法和類型系統。要實現互操作性,WebService平台必須提供一套標準的類型系統,用於溝通不同平台、編程語言和組件模型中的不同類型系統。Web service平台必須提供一種標准來描述Web service,讓客戶可以得到足夠的信息來調用這個Web service。最後,我們還必須有一種方法來對這個Web service進行遠程調用,這種方法實際是一種遠程過程調用協議(RPC)。為了達到互操作性,這種RPC協議還必須與平台和編程語言無關。
至於php嘛, 就是一門動態的腳本語言, 無需和webservice畫上勾