SOA with C, C++, PHP and more

6,100 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 Services Framework (WSF) for C,C++,PHP solves the enterprise expectations on interoperability.

Published in: Technology
1 Comment
3 Likes
Statistics
Notes
  • keylabs is providing best devops online training..please go to the link below http://www.keylabstraining.com/devops-online-training-tutorial
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
6,100
On SlideShare
0
From Embeds
0
Number of Embeds
625
Actions
Shares
0
Downloads
139
Comments
1
Likes
3
Embeds 0
No embeds

No notes for slide

SOA with C, C++, PHP and more

  1. 1. SOA with C, C++, PHP … Samisa Abeysinghe Director, Engineering WSO2, Inc
  2. 2. SOA is about Architectural Design And We need implementation techniques & tools to build it
  3. 3. Language of your Choice You should have freedom to choose You might also have reasons to choose
  4. 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. 5. Why C++? Widely used (and some legacy) Financial, Banking, Telco, DBMS, Embedded And like C it offers: Performance, Flexibility, Control
  6. 6. Why PHP? Installed on over 20 million websites and 1 million web servers http://www.php.net/usage.php
  7. 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. 8. SOA in a Heterogeneous World
  9. 9. Expectations Tooling for WSDL Security Interoperability Binary Attachments Reliability
  10. 10. Interoperability - PHP
  11. 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. 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. 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. 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. 15. How to adapt a C++ Application as Web Services
  16. 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. 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. 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. 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. 20. Web Services are Fast
  21. 21. Web Services are Faster
  22. 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. 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. 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. 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. 26. Q&A

×