2011-09-12 5 views
1

CI로 작성된 웹 응용 프로그램을 확장하여 시각적 기본 응용 프로그램과 통신합니다.CodeIgniter가 포함 된 SOAP 서버

우선 내가 선택한 솔루션이 좋은 옵션인지 알고 싶습니다 ... 이전에 whith xml-rpc에서 작업하고 REST 서비스에 손을 넣었지만 SOAP 솔루션은 더 완벽 해 보입니다. . 내가 잘못?

어쨌든, 최대 문제는 지금 내가 내 컨트롤러 내부 함수를 호출하지 못할 것입니다 ... 여기 내 코드입니다 : 내가 WSDL 파일을 컴파일 한

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; 
    } 

} 

,하지만 난 site.com/ 전화 후

SoapServer :: addFunction() [soapserver.addfunction] : 비 존재하지 않는 기능 '의 sayHello'

나는 또한 $의 CI를 전달하려고했습니다 = & get_in를 추가하려고 웹 서비스 나는 다음과 같은 오류가 발생합니다 stance()를 $ server-> setObject()로 바꾸지 만 $ this를 전달하는 것과 같다고 생각합니다.

는 UPDATE - 2011년 12월 9일

은 이미 전체 개체 $이 설정되어있는 경우) addFunction을 (사용할 필요가 없습니다 ... 그것을 알아 냈다. SOAP은 wsdl 파일에 선언 된 함수 만 호출합니다. 어쨌든 privete/protected로 함수를 설정할 수없는 것으로 보입니다.

SOAP을 계속 사용할 지 확신하지 못했지만 ... tutorial written by Phil Sturgeon은 다른 응답 유형 (json, xml, serialize, csv)을 반환하는 REST 방식을 사용하는 좋은 해결책을 보여줍니다.

답변

6

더 자세히보기 어떻게 그렇게?

SOAP는 훨씬 더 정의되고 형식화 된 전송 프로토콜이지만 데이터를 전송하는 것만으로도 복잡합니다. WSDL은 필자에게 복잡하지 않은 계층이다. 그것은 클라이언트와 서버에게 어떤 타입의 데이터인지를 알려주는 데 사용되지만, PHP는 타입에 관해서는 그렇게주지 않는 이유는 무엇입니까? 당신이 NuSOAP 클래스를 사용하는 경우

REST 빠른 JSON = 쉽게
SOAP 및 XML은 = 느린 못 생기고

+0

감사하십시오! 그래서, 나는이 프로토콜이 PHP를 위해 필요하지 않다는 것을 이해하지만 VB 응용 프로그램은 어떻습니까? 나는 나의 앱을 인터페이스 할 필요가있는 개발자에게 더 쉽게 삶을 만들고 싶다. 그리고 나는 많은 VB 개발자가 SOAP에 익숙하다는 것을 알고있다. VB에서 JSON을 쉽게 파싱 할 수 있습니까? – Luciano

+1

알 수도 있지만 가능합니다. http://jayrock.berlios.de/ –

1

다음 WSDL은 문제가되지 않습니다.

http://yoururl/api?wsdl 

과 같이 NuSOAP에서 WSDL을 생성하면됩니다. 나는 NuSOAP에 의해 개발 된 SOAP 서비스를 가지고 있으며 모든 Lang에서 매력과 같은 모든 기능을 수행합니다. 이는 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

이 코드가 질문에 대답 할 수있는 이유는 무엇이며이 코드가 질문에 대답하는 이유 및/또는 방법에 대한 추가 컨텍스트를 제공하면 장기적인 가치가 향상됩니다. –