Your SlideShare is downloading. ×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

SOA with C, C++, PHP and more

4,585
views

Published on

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 …

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.

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,585
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
112
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. SOA with C, C++, PHP … Samisa Abeysinghe Director, Engineering WSO2, Inc
  • 2. SOA is about Architectural Design And We need implementation techniques & tools to build it
  • 3. Language of your Choice You should have freedom to choose You might also have reasons to choose
  • 4. Why C? Because it is the most portable And bunch of other reasons like Many interesting applications written in C httpd, PHP, Ruby, MySQL
  • 5. Why C++? Widely used (and some legacy) Financial, Banking, Telco, DBMS, Embedded And like C it offers: Performance, Flexibility, Control
  • 6. Why PHP? Installed on over 20 million websites and 1 million web servers http://www.php.net/usage.php
  • 7. Chances Your other application (legacy or green-field) can be C, C++, PHP or the like Can we get them on the SOA?
  • 8. SOA in a Heterogeneous World
  • 9. Expectations Tooling for WSDL Security Interoperability Binary Attachments Reliability
  • 10. Interoperability - PHP
  • 11. PHP Web Services Frameworks Package Written in WSDL Security Attachments Reliability PHP5 SOAP Ext C Partial No No No NuSOAP PHP Yes No No No SCA with PHP(IBM) PHP Yes No No No WSO2 WSF/PHP C Yes Yes Yes Yes
  • 12. 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
  • 13. 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();
  • 14. 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);
  • 15. How to adapt a C++ Application as Web Services
  • 16. C/C++ Web Services Frame- works Package WSDL Security Attachments Reliability HydraExpress Partial No Partial No gSOAP Yes Partial Yes No WSO2 WSF/C Partial Yes Yes Yes WSO2 WSF/C++ Partial Yes Yes Yes
  • 17. 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
  • 18. C++ Example - Service 1.#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.}
  • 19. C++ Example - Client 1.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.try 9.{ 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. else 24. { 25. cout << endl << "Error: " << e << endl; 26. } 27.} 28.delete payload;
  • 20. Web Services are Fast
  • 21. Web Services are Faster
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. References Various Web Services Frameworks http://wso2.org/projects/wsf SharePoint Web Services http://msdn.microsoft.com/en-us/library/bb862916.a Apache Axis2/C Web Services Performance http://wso2.org/library/3532 Example applications for SOA http://incubator.apache.org/stonehenge/ PHP Web Services Blog http://phpwebservices.blogspot.com/
  • 26. Q&A