首頁 > 後端開發 > C#.Net教程 > .NET調PHP Web Service的典型例子

.NET調PHP Web Service的典型例子

黄舟
發布: 2016-12-15 13:34:13
原創
1104 人瀏覽過

最近一個專案由「WinForm直接存取DB2」移植到「WinForm透過PHP Web Service來存取DB2」。

(優點是php可以架在Linux上,而Linux是免費的)

這個命題的困難不是存取DB2,而是.NET呼叫PHP的Web Service。對我這個長期作.NET,之前一直以為只有.NET才可以做Web Service…的人來說,真是有點強「聰」所難了。

但是問題還是要解決的,期限就擺在眼前呢。經過一番調查,終於有了眉目,現在分享給大家。

首先要說明的,PHP伺服器需要至少需要兩個檔案-一個WSDL檔案和一個PHP檔案。 WSDL檔案是一種機讀的XML文件,用來描述WebService提供的服務和呼叫方法(對於.NET則可以自動產生呼叫程式碼,十分好用),php檔案就是真正實現的WEB服務了。

1)PHP伺服器端程式碼

1-1)TestWebService.php程式碼

以下為引用的內容:

?類 TestWebService
{
    public function Hello()
    {
        return array( unction GetArray($args )
        {
          /*

          呼叫該方法時就必須傳value1,value2兩個參數。

            (這十分令人費解,我的理解是,在調用該方法時,系統把所有參數都放到一個對象裡傳過來的)
    value1 = $args->value1;  
        $value2 = $args->value2;//這兩句是取得真正的參數
 
    >
        //回傳值也很特別,不是直接回傳$arry,而是把它放到一個物件裡再回傳。
        return array("GetArrayResult"=>$arry);

    }

}

//建立WebSevice
}

//建立WebSevice
}

//創建WebSevice

}


//建立WebSevice實例
//指定類別名稱
$server->setClass("TestWebService");

$server->handle();

?>
 


1-2)TestWebService.wsdl程式碼

以下為引用的內容:



 
    ;
       
      元素>
  Type>

           
    🎜>           
           
         

        ComplexType> se">
       
         
           
   ult" type="tns:ArrayOfString"/>
         
       
     
   >         
       

      
      
      >   
 

 
     

 
   
:message >
 
   
  wsdl:dlsage>
   
  訊息>
 

     
      input>
      🎜>      :output>
   
 
 
   
     
   

     
    

 

 


WSDL的程式碼比較長,當方法很多時,手敲程式碼是不太可能的。有一個巧的辦法,就是也用.NET實作一個不含真正方法體的Web Serivce,然後透過http://***/TestWebService.asmx? wsdl的方法產生wsdl程式碼檔。

關於WSDL文件,我要說明特別說明兩點:

(1)soap:address結點是聲明WebService的位址,部署時要改成對應位址;

(2)一維數組的宣告類型為ArrayOfType,字串陣列為ArrayOfString。如果Type不是簡單類型,則Type需要另外聲明。

2).NET客戶端程式碼

先加入Web引用,位址為WSDL檔案的Http位址。

呼叫程式碼(C#)

以下為引用的內容:

        //初始化WebService
  >        //調式第一個方法
         string str = srv.HelloWorld();
     string1","string2") ;
 

總結: (一)PHP是一種弱型別語言,檢查錯誤比較困難。 array類型也與一般理解的陣列不同,它也有類似Hashtable的用法。


(二)PHP Web Service方法的傳入參數、回傳值都至多有一個,因為真正呼叫時的參數和回傳值,都是包裝到一個物件中傳送的。

(三)PHP Web Service也支援自訂類型和自訂類型陣列等複雜類型,但不支援多組數組。

(四)若回傳值需要是多張二維表時,我淺薄的以為,可以傳化一組字串數​​組傳送,格式為

[表1行數],[表1列數],[表1列名1],[表1列名2],…[表1列名N],[表1中按行列存放的值]

[表2行數],[表2列數],[表2列名1],[表2列名2],…[表2列名N],[表2中依列存放的值]

……

[表M行數],[表M列數],[表M列名1],[表M列名2],…[表M列名N ],[表2中按行列存放的值]

以上就是.NET調PHP Web Service的典型例子的內容,更多相關文章請關注PHP中文網(www.php.cn)!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板