.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을 보내는 경우 나는 유효한 반응을 얻고 결국.
XML 콘텐츠가 동일하지만 요청이 아닌 경우 가장 가능성있는 원인은 SOAPAction HTTP 헤더입니다. Fiddler 및 soapUI에서 * 재생 * 해보십시오. 또한 WSDL 파일 (최소한 하나의 링크)을 게시 할 때 도움이 될 수 있습니다. – ArtM
그래, 나는 SOAPAction이 예상대로하지 않고 있다는 것을 알아 냈습니다. 다음은 오류가 발생했습니다. "응용 프로그램이 요청을 deserialization하는 동안 오류가 발생했습니다 : 1 행, 0 열, -1, /usr/lib/perl5/XML/Parser.pm 187 행의 요소가 없습니다." –