Maison > développement back-end > Tutoriel C#.Net > .NET调PHP Web Service的典型例子

.NET调PHP Web Service的典型例子

黄舟
Libérer: 2016-12-15 13:34:13
original
1093 Les gens l'ont consulté

最近一个项目由“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代码

以下为引用的内容:

class TestWebService
{
public function HelloWorld()
{
return array("HelloWorldResult"=>"Hello");
    }

    public function GetArray($args)
        {
          /*
           注意,Web Service的方法在声明时至多一个参数,
            可是在调用该方法时就必须传value1,value2两个参数。
            (这一点十分令人费解,我的理解是,在调用该方法时,系统把所有参数都放到一个对象里传过来的)
          */

        $value1 = $args->value1;  
        $value2 = $args->value2;//这两句是获取真正的参数
 
        $arry = array($value1,$value2);

        //返回值也很特别,不是直接返回$arry,而是把它放到一个对象里再返回。
        return array("GetArrayResult"=>$arry);
    }
}

//创建WebSevice实例
$server = new SoapServer("TestWebService.wsdl");
//指定类名
$server->setClass("TestWebService");

$server->handle();

?>
 


1-2)TestWebService.wsdl代码

以下为引用的内容:



 
   
     
       
     

     
       
         
           
         

       

     

     
       
         
           
           
         

       

     

     
       
         
           
         

       

     

     
       
         
       

     

   

 

 
   
 

 
   
 

 
   
 

 
   
 

 
   
     
     
   

   
     
     
   

 

 
   
   
     
     
       
     

     
       
     

   

   
     
     
       
     

     
       
     

   

 

 
   
   
     
     
       
     

     
       
     

   

   
     
     
       
     

     
       
     

   

 

 
   
     
   

   
     
   

 


 

 


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
        localhost.TestWebService srv = new localhost.TestWebService();
        //调第一个方法
         string str = srv.HelloWorld();
        //调第二个方法
         string[] arry= srv.GetArray("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)!


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal