270 likes | 395 Views
C#/.NET. Basics 2 Some code is from “C# in a Nutshell” and “Programming C#”. This week. Event Handling and delegates ASP.NET Web Forms ASP.NET Web Services. Event Handling Model. Delegates listen for the events and call registered handlers
E N D
C#/.NET Basics 2 Some code is from “C# in a Nutshell” and “Programming C#” Carnegie Mellon University MSCF
This week • Event Handling and delegates • ASP.NET Web Forms • ASP.NET Web Services Carnegie Mellon University MSCF
Event Handling Model • Delegates listen for the events and call registered handlers • Each component has a delegate for every event it can raise • We register a method with the delegate and the delegate will call the method asynchronously Carnegie Mellon University MSCF
Delegates (1) • A Button, for example, needs to notify some object when it is pushed • We don’t want to hardwire (in the button) which object to call • A delegate is a reference type used to encapsulate a method with particular parameter types Carnegie Mellon University MSCF
Delegate (2) using System; delegate String Foo(String x); // create a delegate class class Test { public static void Main() { Foo f = new Foo(ConvertToUpperCase); // create a delegate object String answer = f("abcd"); // call the method in the // object Console.WriteLine(answer); } public static String ConvertToUpperCase(String s) { return s.ToUpper(); } } Carnegie Mellon University MSCF
Delegate (3) Delegate reference public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Button multiplyButton; public void foo() { this.multiplyButton = new System.Windows.Forms.Button(); this.multiplyButton.Text = "Multiply"; this.multiplyButton.Click += new System.EventHandler(this.multiplyButton_Click); } private void multiplyButton_Click(object sender, System.EventArgs e) { textBox3.Clear(); string op1Str = op1.Text; string op2Str = op2.Text; : } Delegate Encapsulated method Carnegie Mellon University MSCF
Multicast Delegate using System; // From C# In A Nutshell delegate void MethodInvoker(); // define delegate class class Test { static void Main() { // create a Test object // and call its constructor new Test(); } Carnegie Mellon University MSCF
Test() { MethodInvoker m = null; m += new MethodInvoker(Foo); // overloaded += m += new MethodInvoker(Goo); // delegate holds m(); // pointers to two } // methods MethodInvoker void Foo() m void Goo() Carnegie Mellon University MSCF
void Foo() { Console.WriteLine("Foo"); } void Goo() { Console.WriteLine("Goo"); } } Output: Foo Goo Carnegie Mellon University MSCF
ASP.NET Web Forms (1) • Web Forms bring rapid appplication development to the web • Similar technology is available on J2EE platforms (struts, Java Server Faces) • Drag and drop development for the web tier – write event handlers as in Windows Forms • User interacts with the sever via a standard browser Carnegie Mellon University MSCF
ASP.NET Web Forms (2) • Web pages are dynamically generated • Standard HTML is sent to the browser • Notepad would work but Visual Studio makes life easy • The user interface code is in an .aspx file • The logic (C# code) is stored in a separate file (containing event handling code) Carnegie Mellon University MSCF
ASP.NET Web Forms (3) • Postback events are handled on the server with an HTTP request. For example, the submit button is clicked. • Non-postback events are not handled by the server immediately. For example, text is entered into a form or the mouse is moved. • State is automatically added to an otherwise stateless protocol. .NET maintains the user’s session. Carnegie Mellon University MSCF
Web Form Life Cycle • Complicated series of activities similar to what is found in J2EE struts and JSF • For this class let’s just say that a lot of pre- and post-processing goes on for each web request Carnegie Mellon University MSCF
Creating A Web Form(1) • Prerequisites: IIS and Front Page Server Extensions (use Internet Service Manager and right click on the web site/All Tasks/Configure Server Extensions) • Start/Microsoft Visual Studio .NET/ New Project/Visual C#/ASP.NET Web Application/BinomialTreeWebApp • Generated code goes into c:\Inetpub\wwwroot\BinomialTreeWebApp Carnegie Mellon University MSCF
Creating A Web Form(2) • Two files generated - The .aspx file holds the HTML - The aspx.cs file holds the C# • To see the C# code right click the form and select view code • Note that you can see the design view or the HTML view (tabs on bottom) Carnegie Mellon University MSCF
Web Services “The internet is evolving from a collection of isolated web sites and applications into a general communication bus for distributed applications.” Pradeep Tapadiya, author of “.NET Programming” Carnegie Mellon University MSCF
ASP.NET Web Services 0) Check if IIS is running by attempting to visit http://localhost 1) If it's not running click Start/Settings/Control Panel/Add Remove Programs/ Add Remove Windows Components and enable IIS. 2) If .NET was installed after IIS reconfigure IIS by running aspnet_regiis.exe /i from a command prompt. Carnegie Mellon University MSCF
ASP.NET Web Services Suppose we want to provide a student name given a student ID. Carnegie Mellon University MSCF
ASP.NET Server Code <%@ WebService Language="C#" Class="Student.QueryService" %> // CoolService.asmx using System.Web.Services; using System.Collections; namespace Student { [WebService(Namespace="http://localhost/ACoolQueryService/")] public class QueryService : WebService { private static Hashtable nameValuePairs; Carnegie Mellon University MSCF
static QueryService() { nameValuePairs = new Hashtable(); nameValuePairs.Add("12345","Moe"); nameValuePairs.Add("01234","Curly Joe"); nameValuePairs.Add("54321","Larry"); } [WebMethod] public string GetName(string id) { return (string)nameValuePairs[id]; } } } Carnegie Mellon University MSCF
Create a virtual directory under IIS • Start • Settings • Control Panel • Administrative Tools • Select Internet Information Services • Expand and select the default web site • Click Action/New/Virtual Directory • Provide a name (ACoolQueryService in this case) and browse to the directory holding the .asmx file • Select everything but write Carnegie Mellon University MSCF
Checking the service • Visit the service with your browser • http://localhost/ACoolQueryService/CoolService.asmx • HTML is generated that allows you to test the service via standard HTTP Carnegie Mellon University MSCF
Testing With HTTP Get Request GET /ACoolQueryService/CoolService.asmx/GetName?id=string HTTP/1.1 Host: localhost HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length Response <?xml version="1.0" encoding="utf-8"?> <string xmlns="http://localhost/ACoolQueryService/">string</string> Carnegie Mellon University MSCF
Testing with SOAP POST /ACoolQueryService/CoolService.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length of document SOAPAction: "http://localhost/ACoolQueryService/GetName" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> Carnegie Mellon University MSCF
<soap:Body> <GetName xmlns="http://localhost/ACoolQueryService/"> <id>string</id> </GetName> </soap:Body> </soap:Envelope> Carnegie Mellon University MSCF
SOAP Response HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> Carnegie Mellon University MSCF
<soap:Body> <GetNameResponse xmlns= "http://localhost/ACoolQueryService/"> <GetNameResult>string</GetNameResult> </GetNameResponse> </soap:Body> </soap:Envelope> Carnegie Mellon University MSCF