2011-11-11 3 views
1

프로덕션 서버 (원격 서버)에서 PHP로 구현 된 Soap Server에 문제가 있습니다.PHP SoapServer : URL에 "? wsdl"이 포함 된 XML (WSDL 파일) - XML ​​파일 없음 -

WSDL 모드에서만 함수가있는 간단한 Soap 서버 (기본 PHP 클래스)를 구현했습니다.

이제
ini_set("soap.wsdl_cache_enabled", "0"); 

$server = new SoapServer("wsSeguimiento.wsdl"); 

$server->addFunction("ResultadoDetalleExtendido"); 

$server->handle(); 

, 여러분이 알다시피, 당신이 좋아하는 URL로 웹 브라우저를 통해 서버를 호출 할 때 "HTTP : //localhost/soapserver/wsServer.php"

그래서 내 코드처럼 보이는 당신은 빈 페이지가 있습니다 - 제 경우에는 - 또는 당신이 프로그래밍 한 프로그램 (서버 코드)이 있습니다.

"http : //localhost/soapserver/wsServer.php? wsdl"끝에 "? wsdl"과 동일한 URL을 호출하면 서버 (처리 함수)는 XML wsdl을 on으로 해석합니다. 웹 브라우저를 사용하면 text/xml 콘텐츠 유형을 얻을 수 있으며 XML 정의 자체를 볼 수 있습니다.

이제 내 개발 환경에서 작동합니다. 아무 문제 없습니다. 저는 제 자신의 서버를 테스트하기 위해 Soap 클라이언트를 만들었습니다. 그리고 그것이 빠른 응답을 반환하는지 확인하기 위해 모든 것이 잘 동작합니다. 그러나 코드를 프로덕션 서버에 업로드하면 작동하지 않습니다.

Firefox는 "? wsdl"호출과 함께 "XML 형식이 잘못되었습니다"라는 일반적인 오류가있는 URL에 표시되지만이 경우 XML 파일이 전혀없는 것처럼 시작 부분부터 나타납니다. 그리고 내 클라이언트를 사용하는 경우, 나는 오류 얻을 :

SOAP-ERROR : WSDL 구문 분석 : '? : //.../SOAP_SERVER/seguimientoServer.php WSDL HTTP'에서로드 할 수 없습니다 시작 태그를 '<'을 찾을 수 없습니다.

WSDL XML 파일의 네임 스페이스와 URL을 올바르게 변경했습니다. 그래서 제대로 작동해야합니다. 그러나 그렇지 않습니다.

내가 ... 청크 데이터, 내용 길이, X가 구동 -에 의해, 무엇을 기준으로, HTTP 헤더 자체와 관련된 기존의 버그가 있음을 발견했습니다

하지만이 솔루션을 볼 수 없습니다 .

나는 (핸들() 호출 후)이 기반으로 내 서버에 약간 해킹을 수행했습니다

if(isset($_REQUEST['wsdl'])) 
{ 
    ob_clean(); 
    echo file_get_contents("wsSeguimiento.wsdl"); 
} 

그리고 이와

, 그것은 정말 작품! 그러나 이것이 이것을 해결할 수있는 방법 일 필요는 없다고 확신합니다 ...

답변

0

wsdl 시작 부분에 유효하지 않은 문자가있는 것 같습니다. 어쩌면 우주일까요?

+0

아니요 ... 그렇지 않습니다. 내 개발 Apache 환경에서 완벽하게 작동합니다. 하지만 그것은 생산 아파치에서 작동하지 않습니다 그리고 XML의 시작에 아무것도 변경했습니다 ... : ( – Lightworker