1 / 21

INFOSYS 290, Section 3, Fall 2005 , Web Services: Concepts, Design and Implementation

INFOSYS 290, Section 3, Fall 2005 , Web Services: Concepts, Design and Implementation. Lecture 4: Creating Web Services. Adam Blum ablum@good.com. Today’s Content. Creating Web Services Overview Demo Web Service Creation Raw computation Database HTML scraping XML wrapping

hinto
Download Presentation

INFOSYS 290, Section 3, Fall 2005 , Web Services: Concepts, Design and Implementation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. INFOSYS 290, Section 3, Fall 2005, Web Services: Concepts, Design and Implementation Lecture 4: Creating Web Services Adam Blum ablum@good.com

  2. Today’s Content • Creating Web Services Overview • Demo Web Service Creation • Raw computation • Database • HTML scraping • XML wrapping • SOAP web service wrapping • Break To Set Up Environments • MindReef SOAPScope • AboveAll • Visual Studio • Redemo of Consuming Web Services • MindReef • AboveAll • Visual Studio • Lecture: Asynchronous Web Services

  3. Creating Web Services • Create a web service project • Design the interface • Demoing “method-oriented interfaces” today • Place [WebMethod] around the exposed methods • Write your internal logic • Test with Visual Studio and debug

  4. Example Web ServicesDemonstrating Various Techniques • Raw computation • PokerOdds (http://www.sims.berkeley.edu/academics/courses/is290-3/f05/samples/PokerOdds) • Database creation • ProjectTraq • Workouts • XML wrapping • Blogs (http://www.sims.berkeley.edu/academics/courses/is290-3/f05/samples/PokerOdds) • SportsBetLines (http://www.sims.berkeley.edu/academics/courses/is290-3/f05/samples/PokerOdds) • HTML/HTTP scraping • PokerOdds AnalyzeHands() • SOAP web service wrapping • SalesForce

  5. Informational Web Services • QCUD • Multiple records in query • Doesn’t have to have CUD • Richly descriptive records • Generally comes from a persisted store • Contrast with computation or transactional web service

  6. Informational Web Service Examples • Sales accounts, contacts, tasks, opportunities • Project bugs • Helpdesk, customer support items • Blog entries • Newsfeeds

  7. Consuming Web Services • Ad hoc tools and management systems • E.g. MindReef SOAPScope • Forms design environments • E.g. AboveAll Studio • Third generation traditional programming environments • E.g. Visual Studio.NET 2005

  8. Asynchronous Web Services

  9. Why Asynchronous Web Services? • Speed • Due to overhead of XML and http XML web services can be SLOW • Unpredictability • Your app may be invoking a web service that itself is slow, unreliably available or involves a human in the process • Size • Moving to larger coarsegrained documents and less frequent chatty method calls can introduce more overhead Blocking on downstream services creates instant bottlenecks in your application

  10. Creating Asynchronous Web Services • Write “begin” and “end” methods versus single invocation methods • VisualStudio.NET generates: • public System.IAsyncResult BeginValidateEmailAddress(string emailAddress, System.AsyncCallback callback, object asyncState) { • return this.BeginInvoke("ValidateEmailAddress", new object[] {emailAddress}, callback, asyncState); • } • public CheckEmailResult EndValidateEmailAddress(System.IsyncResult asyncResult) { • object[] results = this.EndInvoke(asyncResult); • return ((CheckEmailResult)(results[0])); • }

  11. Invoking Asynchronous Web Services • Polling • Blocking • Callbacks

  12. Polling // polling version private void Command1_Click(object sender, System.EventArgs e) { emailvalidatorproxy=new Einsteinware.EmailServices(); • int start=DateTime.Now.Second; • IAsyncResult ar=emailvalidatorproxy.BeginValidateEmailAddress(TextBox1.Text,null,null); • while (!ar.IsCompleted){ • //do stuff • } • switch(emailvalidatorproxy.EndValidateEmailAddress(ar)){ • case Einsteinware.CheckEmailResult.Valid: • Label1.Text="Valid"; • break; • default: • Label1.Text="Invalid"; • break; • } }

  13. Blocking • private void Command1_Click(object sender, System.EventArgs e) • { • emailvalidatorproxy=new Einsteinware.EmailServices(); • IAsyncResult ar=emailvalidatorproxy.BeginValidateEmailAddress(TextBox1.Text,cb,emailvalidatorproxy); // do lots of stuff • ar.AsyncWaitHandle.WaitOne(); • switch(response) • { • case Einsteinware.CheckEmailResult.Valid: • Label1.Text="Valid"; • break; • default: • Label1.Text="Invalid"; } • }

  14. WaitHandle Object • WaitOne • Waits for this one handle • WaitAny • Static method which takes array of WaitHandles, returns when any have completed • WaitAll • Returns when all have completed

  15. Invoking with a Callback // callback version private void Command1_Click(object sender, System.EventArgs e) { emailvalidatorproxy=new Einsteinware.EmailServices(); // instantiate the AsyncCallback delegate AsyncCallback cb = new AsyncCallback(EmailvalidatorCallback); int start=DateTime.Now; IAsyncResult ar= emailvalidatorproxy.BeginValidateEmailAddress( TextBox1.Text,cb,null); Label1.Text=Label1.Text + "(" + System.Convert.ToString( DateTime.Now.CompareTo(start) ")"; }

  16. The Callback Itself • public delegate void MyDelegate(Label l,String s); • private void EmailvalidatorCallback(System.IAsyncResult ar) • { • CheckEmailResult response=emailvalidatorproxy.EndValidateEmailAddress(ar); • switch(response) • { • case CheckEmailResult.Valid: • message="Valid"; • break; • … • } • responseLabel.Invoke( • new MyDelegate(DisplayResponse),new object[]{label1,message}); • } • private void DisplayResponse(Label label,String message) • { • label.Text=message; • Form1.ActiveForm.Refresh(); • } Remember: callbacks are on a separate thread and need a way to communicate back to the main thread to display…hence delegates

  17. Using the Async State Object • // using async state to handle two label objects • private void button1_Click(object sender, System.EventArgs e) • { • label1.Text="";label2.Text=""; • emailvalidatorproxy=new Einsteinware.EmailServices(); • IAsyncResult ar= emailvalidatorproxy.BeginValidateEmailAddress( textBox1.Text,new AsyncCallback(EmailvalidatorCallback),label1); • IAsyncResult ar2= emailvalidatorproxy.BeginValidateEmailAddress( textBox1.Text,new AsyncCallback(EmailvalidatorCallback),label2); • }

  18. Callback Using the Async State Object • private void EmailvalidatorCallback(System.IAsyncResult ar) • { • CheckEmailResult response=emailvalidatorproxy.EndValidateEmailAddress(ar); • String message=""; • switch(response) • { • case EinsteinwareCheckEmailResult.Valid: • message="Valid“; break; • case CheckEmailResult.InvalidUser: • message="Invalid user"; • break; • … • } • Label responseLabel = (Label)ar.AsyncState; • responseLabel.Invoke(new MyDelegate(DisplayResponse) ,new object[]{responseLabel,message}); • }

  19. Course Project • Goal • Build “web service consuming” client applications from desktops and mobile devices • Requirements • Use an “informational” web service • Has QCUD (Query, Create, Update and Delete operations) • Query returns MULTIPLE records • Consume web service from AboveAll or Visual Studio for desktop • Consume WS from GoodAccess Web Services or Visual Studio from mobile device • Optionally write or enhance a backend web service • Possibly as a “proxy web service” layer on top of original web service • Only if previous steps are achieved • Demo to class • Write up as three page paper including: architecture and UI design • Team size • Two people per project • Proposal • Due today, will accept later

  20. References • Specs • SOAP Specification, http://www.w3.org/TR/soap/ • WSDL Specification, http://www.w3.org/TR/wsdl • UDDI Specification, http://www.uddi.org/specification.html • Tools • Visual Studio, http://microsoft.com/vstudio • Microsoft Web Services Enhancements • http://msdn.microsoft.com/webservices/building/wse/default.aspx

  21. How To Reach Me • ablum@good.com • 408-396-5490 • Office hours Thursday at 4pm • web-services@sims.berkeley.edu

More Related