2011-09-12 24 views
1

我正在擴展一個使用CI編寫的Web應用程序來與Visual Basic應用程序進行通信。使用CodeIgniter的SOAP服務器

首先,我想知道我選擇的解決方案是否是一個不錯的選擇...我以前曾經在xml-rpc上工作過,並且將手放在REST服務中,但對我來說SOAP解決方案看起來更完整。我錯了嗎?

無論如何,這個問題到現在爲止,我不能打電話給我的控制器內部功能...這裏是我的代碼:

class Webservice extends CI_Controller { 

    function __construct() { 
     parent::__construct(); 
    } 

    public function index() { 
     $server = new SoapServer("http://www.site.com/test.wsdl"); 
     $server->setObject($this); 
     //$server->addFunction('sayHello'); 
     $server->handle(); 
    } 

    function sayHello($name) { 
     $salute = "Hi " . $name . ", it's working!"; 
     return $salute; 
    } 

} 

我編譯WSDL文件,但之後我打電話site.com/ web服務我得到以下錯誤:

SoapServer的::調用addFunction()[soapserver.addfunction]:嘗試添加不存在的功能 '的sayHello'

我也試過路過$ CI = & get_in立場()到$ server-> setObject(),但我認爲它與傳遞$ this相同。

更新 - 12/09/2011

我想通了...有沒有必要使用調用addFunction()如果已設置整個對象,$這。 SOAP只會調用wsdl文件中聲明的函數,無論如何,我似乎無法將函數設置爲privete/protected。

說了我不確定繼續使用SOAP ... tutorial written by Phil Sturgeon顯示了一個使用REST方法返回不同響應類型(json,xml,serialize,csv)的好解決方案。

回答

6

更完整?怎麼會這樣?

SOAP是一種定義更爲明確的類型化的傳輸協議,但它只是發送數據而非常複雜。 WSDL是我了一層複雜性是不必要的。它只是用來告訴客戶端和服務器什麼類型的數據,但PHP不會給一個該死的類型,所以爲什麼要使用它?

REST和JSON =快捷方便
SOAP和XML =較慢的fugly

+0

感謝您的回覆!所以,我明白這個協議不是PHP所必需的,但是VB應用程序呢?我希望讓需要與我的應用程序接口的開發人員的生活更輕鬆,並且我知道很多VB開發人員都熟悉SOAP。它更容易解析與VB的JSON? – Luciano

+1

誰知道,但它是可能的:http://jayrock.berlios.de/ –

1

如果你使用的NuSOAP類,那麼WSDL不是問題。你只需要打電話給你的服務器:

http://yoururl/api?wsdl 

和NuSOAP會爲你生成WSDL。我有一些由NuSOAP開發的SOAP服務,所有的工作都像魅力一樣。支持SOAP。

祝你好運!

0

試試這個

<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 

ini_set("soap.wsdl_cache_enabled", "0"); 
$srv = new SoapServer("http://www.example.com/test.wsdl"); 
$srv->setClass('Webservice'); 
$srv-> addFunction(SOAP_FUNCTIONS_ALL); 
$srv->handle(); 


class Webservice extends CI_Controller { 

function __construct() { 
    parent::__construct(); 
} 

public function index() { 
} 

function sayHello($name) { 
    $salute = "Hi " . $name . ", it's working!"; 
    return $salute; 
} 

} 
+1

儘管此代碼可以回答這個問題,提供有關爲什麼和/或如何代碼回答了這個問題提高了其長期價值的其他方面。 –