在VS2013中用C#做了一个演示用的WCF(.net 4.0)。功能很简单,MS数据库中有张 t_demo 表,有字段ID、Col1、Col2,WCF的功能是根据ID返回一条记录。此记录被封装成一个类,类属性和表字段一一对应。
WCF被发布在 http://192.168.199.180/wcf/Service.svc
我们来测试查一条ID=4的记录。PHP代码如下:
<?php
ini_set('display_errors','On');
header('Content-Type:text/plain');
$wcfClient = new SoapClient('http://192.168.199.180/wcf/Service.svc?wsdl');
$args = array('ID'=>4);
$returnVal = $wcfClient->Select_t_demo($args);
print_r($returnVal->Select_t_demoResult->Col1);
?>
意外之喜,连中文都直接支持了。
有几个点要说明下:
1 参数对象貌似一定要定义。一开始我直接写了$returnVal = $wcfClient->Select_t_demo(4)期望返回ID=4的记录,但是死活都没有记录返回。开了个MSSQL的追踪,发现此时传入的参数是0。
2 $returnVal->Select_t_demoResult中,Result是自动加上的。
3 $args = array('ID'=>4);中,ID也不是随便起的,必须和WCF发布出来的参数保持一致。
把这个对象作为参数传入也很简单,但是同样要注意参数名称一致性的问题:
<?php
ini_set('display_errors','On');
header('Content-Type:text/plain');
$wcfClient = new SoapClient('http://192.168.199.180/wcf/Service.svc?wsdl');
$phpObj = new stdClass();
$phpObj->Col1 = 'aabb';
$phpObj->Col2 = time();
$args = array('obj'=>$phpObj);
$returnVal = $wcfClient->Insert_t_demo($args);
print_r($returnVal->Insert_t_demoResult);
?>
当WCF返回一个List<对象>时,可以这样还原:
<?php
ini_set('display_errors','On');
header('Content-Type:text/html');
$wcfClient = new SoapClient('http://192.168.199.180/wcf/Service.svc?wsdl');
$returnVal = $wcfClient->FillList_t_demo();
$list = $returnVal->FillList_t_demoResult;
foreach ($list as $rows)
{
foreach ($rows as $row)
{
print_r($row->ID. '<br/>');
}
}
?>