2009-12-19 7 views
3

WCF 서비스가 있습니다. 다중 클라이언트와 세 개의 엔드 포인트가 있습니다. 엔드 포인트 바인딩은 nettcp, wsHttp 및 basicHttp입니다. 내가 지금처럼 php'd 내장 SoapClient 클래스를 통해 연결을 시도하는 경우 :NetTCP 바인딩과 BasicHttpBinding이있는 PHP의 WCF 서비스에 연결

$service = new SoapClient 
("http://service.companyname.local:6666/Service/?wsdl", 
array(
     "location" => "http://service.companyname.local:6666/Service/Basic", 

    "trace" => true, 
    'soap_version' => SOAP_1_1 
    ) 
); 

을 나는 다음과 같은 얻을 :

PHP Fatal error: SOAP-ERROR: Parsing WSDL: PHP-SOAP doesn't support transport 'http://schemas.microsoft.com/soap/tcp' in c:\www\client.php on line 666 

지금 내 해결 방법은 수동으로 WSDL을 저장하고 nettcp을 제거하는 것입니다 제본. 자동으로 생성 된 wsdl을 사용할 수있는 해결 방법이 있습니까? web.config의 wsdl에서 바인딩을 숨길 수 있습니까? 다른 바인딩에 다른 wsdl을 생성 할 수 있습니까? 두 개의 서비스 호스트를 배포하고 싶지 않습니다.

+0

666 번 라인에 오류가 나타나기를 좋아합니다. 그게 무슨 뜻입니까? :-) –

+0

Walden, 유죄 파일 이름과 줄 번호를 보호하기 위해 오류 메시지를 "삭제"했습니다. .NET, PHP 또는 특정 작업을 향한 의식적 또는 잠재 의식적 감정을 결정하는 것은 독자의 연습입니다. –

답변

0

I filed a feature request with PHP. 그들이 이것을 구현한다면 나는 이것을 정답으로 표시 할 것이다. 그래도 더 나은 해결 방법은 아직 열려 있습니다.

업데이트 : 나는 이것을 구현하기위한 패치를 제출했다. 나는 그 승인을 기다리고있다.
업데이트 : 패치가 svn에게 커밋되었습니다. PHP의 다음 릴리스를 기다리고 있습니다.
업데이트 : 패치는 현재 PHP 5.3.3 및 5.2.14의 일부입니다.

1

두 개의 서비스 호스트를 배포하지 않으려는 경우 Windows 서비스에서 단일 ServiceHost를 자체 호스팅한다고 가정합니다. 필자는 원하는만큼 내부적으로 많은 서비스 impls를 호스트 할 수있는 일반적인 서비스 호스트를 구축하여이 문제를 해결했습니다 (예 : 새로운 서비스는 config의 각 서비스 항목에 대한 ServiceHost입니다). 그렇게하면 필자는 필요한만큼 단일 Windows 서비스에서 많은 서비스 impls를 유연하게 호스트 할 수 있습니다. 이렇게하면 WSDL을 깨끗하게 유지하기 위해 basicHttp 바운드 서비스를 다른 서비스와 분리 할 수 ​​있으므로 문제가 해결됩니다. 주위에 떠 다니는 몇 가지 오픈 소스 예제가 있습니다 (here의 것). (here 참조) 나는 그것이 WsdlExporter에서 내장 사용자 정의 메타 데이터 끝점을 노출하는 것입니다 수행하는 생각할 수

유일한 다른 방법

행운을 빕니다!

+0

나는 커스텀 wsdl 익스포터를 만들었다. 지금은 약간 hackish지만, 기본적으로 작동합니다. –

0

내가 현재 연구중인 또 다른 옵션은 WSF-PHP이라는 PHP 용 타사 비누 클라이언트입니다.

관련 문제