经过4天的测试并在Stack Overflow中询问:Importing Yii Created Soap Server To Visual Studio这就是结果:
问:为什么我的Yii soap服务器无法在visual studio中导入? A: Yii对WSDL使用RPC编码样式,而visual studio需要document / literal。因此,您可以使用Zend Framework库来创建文档/文字编码的Web服务器。
新问题:经过数小时的测试后,我发现在函数中返回一个数组会产生一个错误,Visual Studio无法导入它。
SOAP返回数组数据是否有替代类型,因此visual studio可以导入服务器的WSDL吗?
此外,我无法实现在Yii 中实现文档/文字Zend Framework创建的soap服务器的实际示例,因此我编写了我编写的内容,也许其他人可以参考:
./保护/组件/ soapTTS.php
<?php
class soapTTS {
/**
* @param int $CourseId
* @return array
*/
public function ListAllStudentsOnASelectiveCourse($CourseId) {
$out = helper::ListAllStudentsOnASelectiveCourse($CourseId);
return $out;
}
}
?>
上面的 * @return array
会导致问题。
./保护/控制器/ SoapController.php
<?php
class SoapController extends Controller {
public function actionService() {
Yii::import('application.vendors.*');
Yii::setPathOfAlias('Zend', Yii::getPathOfAlias('application.vendors.Zend'));
if (isset($_GET['wsdl'])) {
$autodiscover = new Zend\Soap\AutoDiscover(new \Zend\Soap\Wsdl\ComplexTypeStrategy\ArrayOfTypeSequence());
$autodiscover->setBindingStyle(array('style' => 'document'));
$autodiscover->setOperationBodyStyle(array('use' => 'literal'));
$autodiscover->setClass('soapTTS');
$autodiscover->setUri('http://localhost/millms/mws/soap/service');
header("Content-type: text/xml");
echo $autodiscover->toXML();
} else {
// pointing to the current file here
$soap = new Zend\Soap\Server("http://localhost/millms/mws/soap/service?wsdl");
$soap->setObject(new Zend\Soap\Server\DocumentLiteralWrapper(new soapTTS()));
$soap->handle();
}
}
}
?>
答案 0 :(得分:0)
我无法准确解决问题,所以我将所有数组输出作为字符串返回,并将主题转换为JSON响应。因此,在visual studio中导入过程是可以的,并且响应也是正确的。