2011-09-21 7 views
4

SOAP API에서 몇 가지 테스트를 수행하려고하는데 실행 시간이 매우 느립니다. 일부 파고를 해본 결과 영원히 실행되는 SoapClient 생성자라는 것을 알게되었습니다. 또한 그것으로 인해 결과가 http 쿼리가 있는지 보려면 프록시를 사용하여 시도했지만이 쿼리는 상대적으로 빠르게 실행됩니다. 약 30 초 동안 머무르는 쿼리 이후입니다. 여기 PHP SoapClient 생성자가 매우 느림

은 참조를 위해 kcachegrind 스크린 샷입니다 :

kcachegrind

그리고 여기에 찰스 프록시에서 WSDL 쿼리의이 같은 문제는 몇 달 전에보고 된 바있다

charles proxy

여기 :

PHP: SoapClient constructor is very slow (takes 3 minutes)

그러나 그는 대답을 얻지 못했습니다.

모든 의견을 많이 주시면 감사하겠습니다.

편집 :

SoapClient이 시작되는 코드 부분

 $this->client = new SoapClient($host . "/wsdl/v" . $endpoint . "_0/netsuite.wsdl", 

            array( "location"    => $host . "/services/NetSuitePort_" . $endpoint, 

              "trace"     => 1, 

              "connection_timeout" => 5, 

              "typemap"    => $typemap, 

              "user_agent"   => "PHP-SOAP/" . phpversion() . " + NetSuite PHP Toolkit " . $version 

            ) 

    ); 
+1

스크립트를 다시 실행하고 wsdl 파일이 이미 캐시에 있으면 어떻게됩니까? 또한 로컬로 저장된 wsdl 파일을 사용하고 스크립트 실행 시간을 측정하려 했습니까? – Zyava

+0

WSDL 캐싱을 사용하지 않아도 놀았습니다. 또한 내가 말했듯이, Charles Proxy에서 발견 한 것에 기반하여 WSDL이 요청되고 리턴 된 후에 hangup이 발생하는 것처럼 보입니다. – Naatan

+0

soap.wsdl_cache_ttl 옵션을 확인하십시오. 또한 일반 http를 통해 WSDL을 사용할 수 있습니까? 어쩌면 SSL 레이어가 당신 편에서 느려지는 원인 일 것입니다. –

답변

4

여러 사용자를 사용하고 (이것은 넷 스위트 PHP 툴킷의 일부입니다)? 나는 wsdl의 여러 복사본을 가져 오는 여러 사용자와 관련된 것으로 밝혀진 동일한 코드 줄에서 3 ~ 20 분 지연을 얻고있었습니다. http://www.ozonesolutions.com/programming/2011/05/nsclient-login-time/

+0

안녕하세요, 저는 현재 여러 사용자를 사용하고 있지 않습니다. NetSuite의 세션 제한으로 인해 계획되어 있지만. WSDL 캐싱과 관련된 몇 가지 버그가있는 것 같습니다 : \ – Naatan

+0

Whew quick update, WSDL 캐싱을 사용하지 못하게하고 이제는 매우 빠르게 진행됩니다! 그래서 확실히 캐싱 인 것 같습니다. 그것은 무의식의 종류를 무력하게하는 것.. 그러나 그것은 응답을 위해 30 초 기다리는 것을 친다. 귀하의 대답은 해결책이 아니었지만, 그것은 저를 이끌었습니다. – Naatan

+3

"솔루션"으로 약간 빠르다 보니 WSDL_CACHE_NONE이 아니라 WSDL_CACHE_MEMORY입니다. WSDL_CACHE_NONE을 사용하면 여전히 오랜 시간이 걸립니다. 문제의 원인을 우회해야하므로 이상합니다. – Naatan