2010-03-25 4 views
11

gSOAP을 사용하여 웹 서비스에 액세스하려고했습니다 (예 : 제공된 WSDL을 사용하여 C 스텁을 생성 한 다음 앱에서 사용함). 그러나 생성 된 .c 및 개체 파일이 꽤 크고 (수 메가 바이트), 이는 내가 작업하는 임베디드 환경의 문제임을 발견했습니다.가벼운 gSOAP 대안이 있습니까?

간단한 SOAP 라이브러리에 대해 알고 계시거나 ezXML과 같은 일반 XML 생성기 및 구문 분석기로 전환해야합니까?

+7

SOA (Service Oriented Architecture)에 대한 돼지 코끼리 솔루션에 오신 것을 환영합니다. –

+0

왜 SOAP가 여기에 책임이 있는지 알지 못합니다. SOAP과 아무 관련이없는 서비스 정의의 크기입니다. XML 또는 JSON over REST는 크기면에서 동일합니다.하지만 결국에는 모든 코드를 생성하는 편리한 데이터 바인딩없이 ** 모든 ** 직렬화를 직접 코딩해야하기 때문에 아마 더 나빠질 것입니다. 자동화 된 데이터 바인딩을 위해 gSOAP을 사용합니다. 확실한 승자입니다. 그렇지 않으면 gSOAP가 없기 때문에 프로그래머가 지루한 XML 또는 JSON API로 대규모 서비스를 코딩하는 데 오랜 시간을 소비하게되었습니다. –

+0

gSOAP와 XML 메시지 교환을위한 꽤 표준적인 응용 프로그램이 100k 미만의 코드를 사용하고 10k 메시지/초를 실행한다는 (자세한 내용은 https://www.genivia.com/dev.html#performance를 참조하십시오). 대부분 도구로 자동 코딩되며 열심히하지 않습니다. 자동 코딩의 미래에 오신 것을 환영합니다. –

답변

5

최근에 나는이 문제에 대해서도 살펴 봤는데, 내가 찾은 최선의 선택은 gSOAP이었고, 매우 성숙하고 잘 테스트되었다. 그러나 SOAP이 아닌 경로를 선택하기로 결정했습니다. 클라이언트와 서버 양쪽에 있기 때문에 옵션이었습니다. gSOAP를 사용하기 전에 라이센스를 가지고 살 수 있는지 확인하십시오. 사용법에 따라 코드를 공개하거나 지불해야 할 수 있습니다.

또 다른 옵션은 Apache Axis2/C입니다. 경험이 없지만 gSOAP와 비슷한 크기의 풋 프린트가 있다고 생각합니다. 클라이언트 API는 here입니다. 클라이언트 API에 대한 자습서는 here입니다.

파싱 된 XML 경로로 이동하려면 this SO 질문 (답변 참조)에 관심이있을 수 있습니다.

구문 분석 된 경로에 대해 boost :: spirit도 체크 아웃 할 수 있습니다. C++에 익숙하다면 작고 ​​빠르며 특수하고 일반적인 파서를 만들 수 있습니다 (재진입 가능하도록 작성할 수 있으므로 extern "C"인터페이스가있는 정적 객체를 통해 호출하는 것이 정결합니다.). 나는 일반적인 의미로 그것을 보증 할 수있다 (XML과 관련이 없다). 가파른 학습 곡선이지만 큰 보수.

1

일반적으로 우리는 좋은 SOAP 라이브러리를 사용할 수없는 XML (직접 문자열 연결)을 사용합니다.

또 다른 해결책은 JSON으로 전환하는 것일 수 있습니다. 일반적으로 JSON은 작은 오버 헤드와 요청/응답 크기를 가지므로 내장 된 프로그램에서 더 좋을 수 있습니다. SOAP WebService 만 사용할 수있는 경우 서버에서 JSON 요청을 SOAP 요청 및 SOAP 응답을 JSON 응답으로 변환하는 프록시 스크립트를 사용할 수 있습니다.

2

만들고있는 웹 서비스입니까? 그렇다면 SOAP 대신 REST을 사용해보십시오. REST는 훨씬 간단하며 거대한 HTTP-XML-SOAP 변환 계층을 거치지 않고 기존의 테스트되고 작동중인 HTTP 처리기를 사용할 수 있습니다.

다른 사람의 웹 서비스를 사용하는 경우 SOAP 스키마 및/또는 응답 예를 검토하십시오. 나는 이것을지지한다고 믿을 수는 없지만, 스키마가 확장 가능하거나 재귀적인 것이 아니라면 간단한 LALR 파서를 사용하거나 SOAP 또는 XML을 파싱하는 대신 원시 HTTP 응답에서 문자열을 매칭하는 것이 더 나을 것이다. 이것은 임베디드 C에서 구현하는 것이 훨씬 간단합니다.

+0

다른 사람의 웹 서비스를 사용해야합니다. 지금까지 우리는 유용한 XML 파서 (위에서 언급 한 ezXML이 아주 훌륭하게 작동합니다)를 가지고 있습니다. 따라서 어떤 기적적인 SOAP 라이브러리가 나타나지 않는 한, 아마 이런 식으로해야 할 것입니다 :-) – che

+1

REST는 또 하나의 중요한 단점이 있습니다. 실제 웹 서비스의 대부분인 이벤트 지향 웹 서비스에 적합합니다. – rkellerm

1

당신은 Apache CXF을 보았습니까? 이 세대는 소비자가 here입니다 구축

* Java to WSDL 
* WSDL to Java 
* XSD to WSDL 
* WSDL to XML 
* WSDL to SOAP 
* WSDL to service 

더 도움이 가이드 기능을 몇 가지 코드가 있습니다.

+0

멋지다. 그러나 Java 만 지원하는 것 같고 클라이언트 측에서 Java 런타임을 사용할 수있는 옵션이 없다. – che