2012-05-16 3 views
2

.NET 응용 프로그램에 노출해야하는 Perl 라이브러리가있는 Linux 서버가 있습니다. 당연히 나는 SOAP과 같은 플랫폼 독립적 인 솔루션을 구축하여 갭을 메워야한다고 생각했습니다. 나는 이것이 내가 기대했던 것만 큼 쉽지 않은 것을 알게되었다..NET에서 사용하는 Perl 비누 서비스

개념의 작은 증거로서 Perl에서 안녕하세요 세계 서비스를 구축하려고합니다. 일부 포드에

http://guide.soaplite.com/#quick%20start%20guide%20with%20soap%20and%20soap::lite

을 그리고 후추 :: SOAP 내가 여기 발견 주석 : 나는이 튜토리얼의 기반으로 내 코드를 생성 한 http://www.perlmonks.org/?node_id=632923

그리고이 서비스를 결국 :

#!#!/usr/bin/perl 
use Pod::WSDL; 

my $pod = new Pod::WSDL(source => '/var/www/html/perl/test.pl', location => 'http://localhost/perl/test.pl', pretty => 1, withDocumentation =>1); 

print $pod->WSDL; 
,536,913,632 :
#!/usr/bin/perl 
use CGI; 
use SOAP::Transport::HTTP; 

SOAP::Transport::HTTP::CGI->dispatch_to('Demo')-> handle; 

package Demo; 

=begin WSDL 
_RETURN $string 
=end WSDL 
=cut 

sub hi { 
    return "hello, world"; 
} 

나는이 스크립트와 WSDL을 생성 10

이 스크립트를 실행하면 WSDL이 발생합니다. ServiceReference로 .NET 4.0에로드하고 삶이 웅장하다고 생각합니다. 그러나 그렇지 않습니다.

이 같은 기준 envoke 할 때 : (있는 경우

이 SOAPAction은 'URI # 방법'과 일치한다 나는 비누 요청에서이 오류가 결국

var myWS = new ServiceReference1.DemoHandlerClient(new System.ServiceModel.BasicHttpBinding(), new System.ServiceModel.EndpointAddress(url)); 
string result = myWS.hi(); 

을 ': // localhost를/데모 # 안녕 HTTP'

Clearl, 예상 : '// 로컬 호스트/데모/DemoHandler/hiRequest에 http가'있어 y .NET이 예상 된 SOAPAction을 제출하지 않는다는 것을 알았습니다. 이 문제를 해결하려면 어떻게해야합니까? 필자는 클라이언트를 위해 perl SOAP :: Lite 라이브러리를 사용한다면 제대로 작동 할 것이라고 생각합니다.

편집 : 아마도 괴상 아직이 - 나는 .NET을 통해 전송되는 XML을 캡처 피들러를 사용하고 수동으로 SoapUI를 사용하는 동안 같은 XML을 보내는 경우 나는 유효한 반응을 얻고 결국.

+0

XML 콘텐츠가 동일하지만 요청이 아닌 경우 가장 가능성있는 원인은 SOAPAction HTTP 헤더입니다. Fiddler 및 soapUI에서 * 재생 * 해보십시오. 또한 WSDL 파일 (최소한 하나의 링크)을 게시 할 때 도움이 될 수 있습니다. – ArtM

+0

그래, 나는 SOAPAction이 예상대로하지 않고 있다는 것을 알아 냈습니다. 다음은 오류가 발생했습니다. "응용 프로그램이 요청을 deserialization하는 동안 오류가 발생했습니다 : 1 행, 0 열, -1, /usr/lib/perl5/XML/Parser.pm 187 행의 요소가 없습니다." –

답변

3

웹 서비스를 구축하기 위해 2006 년에 SOAP::Lite을 사용했는데 악마가 거룩한 물을 피하는 것처럼 피할 수 없었던 그런 나쁜 경험이었습니다. SOAP로드를 진지하게 진지하게 생각하고 있다면 XML 스키마, SOAP 및 WSDL 용 모듈 세트 XML::Compile을 익히는 것이 좋습니다. 모듈을 사용하는 것이 훨씬 더 좋았으며 메일 링리스트가 있었으며 작성자는 매우 반응이 좋습니다.

서버를 만드는 방법을 보려면 XML::Compile::SOAP::Daemon을보십시오.

+0

너에게. 당신은 좋은 모범이 있습니까? –

+0

궁극적으로 나는 XML : : Compile이 내가 찾는 것 이상의 짐승이라고 생각하지만, 당신이 옳다고 생각한다.XML을 반환하는 간단한 휴식 기반 cgi 스크립트를 작성하려고합니다. 그러나 WSDL을 사용하는 것이 좋을 것입니다. 간단한 REST 스크립트를 작성하기위한 참고 자료로 사용했습니다. http://www.lifecycle-ps.com/blog/?p=93 –