soa with c, c++, php and more
DESCRIPTION
This presentation at the SOA Workshop in Colombo, Sri Lanka (September 17, 2009) by Samisa Abeysinghe, Director of Engineering,WSO2 highlights SOA in a heterogeneous world and explains how WSO2 Web Services Framework (WSF) for C,C++,PHP solves the enterprise expectations on interoperability.TRANSCRIPT
SOA with C, C++, PHP …Samisa AbeysingheDirector, EngineeringWSO2, Inc
SOA is about
Architectural Design
And
We need implementation techniques & tools to build it
Language of your Choice
You should have freedom to chooseYou might also have reasons to choose
Why C?
Because it is the most portable
And bunch of other reasonslike
Many interesting applications written in Chttpd, PHP, Ruby, MySQL
Why C++?
Widely used (and some legacy)Financial, Banking, Telco, DBMS, Embedded
And like C it offers:Performance, Flexibility, Control
Why PHP?
Installed on over 20 million websites and
1 million web servers
http://www.php.net/usage.php
Chances
Your other application (legacy or green-field) can be C, C++, PHP or the like
Can we get them on the SOA?
SOA in a Heterogeneous World
Expectations
Tooling for WSDL Security
Interoperability
Binary AttachmentsReliability
Interoperability - PHP
PHP Web Services Frameworks
Package Written in WSDL Security Attachments Reliability
PHP5 SOAP Ext C Partial No No No
PHP Yes No No No
SCA with PHP(IBM) PHP Yes No No No
WSO2 WSF/PHP C Yes Yes Yes Yes
NuSOAP
Framework that improves PHP user’s ability to provide and consume Web services
Capable of dealing with secure and relabel messaging even with binary data, the only PHP software package to
offer those features
The framework is inter-operable with non-PHP imple-mentations, allowing it to be integrated with enterprise
applications seamlessly
PHP Example – Secure Service
1. function echoFunction($inMessage) {2. $returnMessage = new WSMessage($inMessage->str);3. return $returnMessage;4. }5.6. $pub_key = ws_get_cert_from_file("../keys/alice_cert.cert");7. $pvt_key = ws_get_key_from_file("../keys/bob_key.pem");8.9. $operations = array("echoString" => "echoFunction");10.11. $sec_array = array("encrypt" => TRUE, "algorithmSuite" => "Basic256Rsa15",12. "securityTokenReference" => "IssuerSerial");13.14. $actions = array("http://php.axis2.org/samples/echoString" => "echoString");15.16. $policy = new WSPolicy(array("security"=>$sec_array));17. $sec_token = new WSSecurityToken(array("privateKey" => $pvt_key, 18. "receiverCertificate" =>$pub_key));19.20. $service = new WSService(array("actions" => $actions, 21. "operations" => $operations, 22. "policy" => $policy, "securityToken" => $sec_token)); 23.24. $service->reply();
PHP Example – Secure Client
1.$rec_cert = ws_get_cert_from_file("../keys/bob_cert.cert");2.$pvt_key = ws_get_key_from_file("../keys/alice_key.pem");3.4.$reqMessage = new WSMessage($reqPayloadString, array("to"=>5. "http://localhost/samples/security/encryption/encrypt_service.php",6. "action" => "http://php.axis2.org/samples/echoString"));7.8.$sec_array = array("encrypt"=>TRUE, "algorithmSuite" => "Basic256Rsa15",9. "securityTokenReference" => "IssuerSerial");10.11.$policy = new WSPolicy(array("security"=>$sec_array));12.$sec_token = new WSSecurityToken(array("privateKey" => $pvt_key, 13. "receiverCertificate" => $rec_cert));14.15.$client = new WSClient(array("useWSA" => TRUE, "policy" => $policy, 16. "securityToken" => $sec_token));17.18.$resMessage = $client->request($reqMessage);19.20.printf("Response = %s \n", $resMessage->str);
How to adapt a C++ Application as Web Services
C/C++ Web Services Frame-works
Package WSDL Security Attachments Reliability
Partial No Partial No
Yes Partial Yes No
WSO2 WSF/C Partial Yes Yes Yes
WSO2 WSF/C++ Partial Yes Yes Yes
HydraExpress
gSOAP
Designed for embedding within C or C++ soft-ware stacks to enable Web services
All-in-one solution for the building and deploy-ing of Web services
Widest range of WS-* specifications imple-mentations
WS-Addressing, WS-Policy, WS-Security, WS-SecurityPolicy, WS-Reliable Messaging, MTOM
and WS-eventing
C++ Example - Service1.#include <ServiceSkeleton.h>2.3.using namespace wso2wsf;4.5.class Echo: public ServiceSkeleton 6.{7. public:8. WSF_EXTERN WSF_CALL Echo(){};9.10. OMElement* WSF_CALL invoke(OMElement *message, MessageContext *msgCtx);11.12. OMElement* WSF_CALL onFault(OMElement *message);13.14. void WSF_CALL init(){};15.};1.OMElement* Echo::invoke(OMElement *element, MessageContext *msgCtx)2.{3. OMElement *echoElement = new OMElement(element->getLocalname(), 4. new OMNamespace(element->getNamespace(false)->getURI(),5. element->getNamespace(false)->getPrefix()));6. OMElement *textElement = new OMElement("messsage");7. echoElement->addChild(textElement);8. textElement->setText("Hello World");9. return echoElement;10.}
C++ Example - Client1.ServiceClient serviceClient(client_repo, end_point);2.3.OMNamespace * ns = new OMNamespace("http://ws.apache.org/rampart/c/samples", "ns1");4.OMElement * payload = new OMElement(NULL, "echoIn", ns);5.OMElement * child = new OMElement(payload, "message", NULL);6.child->setText("Hello Service!");7.8.try9.{10. OMElement* response = serviceClient.request(payload, 11. "http://example.com/ws/2004/09/policy/Test/EchoRequest");12. if (response)13. {14. cout << endl << "Response: " << response << endl;15. }16.}17.catch (AxisFault & e)18.{19. if (serviceClient.getLastSOAPFault())20. {21. cout << endl << "Fault: " << serviceClient.getLastSOAPFault() << endl;22. }23. else24. {25. cout << endl << "Error: " << e << endl;26. }27.}28.delete payload;
Web Services are Fast
Web Services are Faster
Web Services are Still Faster
For secure services
10K messages C implementation x10 – x15 times faster than Java
100k messages C implementation x6 – x8 times faster than Java
WSF/C++ Features SOAP 1.1 and SOAP 1.2 WS-Addressing
1.0 submission
MTOM and SwA Support for caching large attachments
WS-Security Base security standards mean that messages can be protected
using Encryption, Authentication and Signature Including WS-SecureConversation and WS-Trust
WSDL2CPP Code Generation tool Supports generating client stubs, service skeletons, build
scripts and deployment scripts
WSF/C++ Features WS-Policy and WS-Security Policy
Enables using industry standard XML to configure security
SSL Enabled Transport Layer WS-Reliable Messaging 1.0, 1.1 and WS-RMPolicy
Enables reliability between platforms including message resending, duplicate detec-tion and persistence
Full REST support (GET, PUT, DELETE, POST) with custom URI Mapping
Enables mapping a REST API easily and naturally
Useful tools Tcpmon wsclient
ReferencesVarious Web Services Frameworks
http://wso2.org/projects/wsfSharePoint Web Services
http://msdn.microsoft.com/en-us/library/bb862916.aspxApache Axis2/C Web Services Performance
http://wso2.org/library/3532Example applications for SOA
http://incubator.apache.org/stonehenge/ PHP Web Services Blog
http://phpwebservices.blogspot.com/
Q & A