Saturday, June 25, 2011

JSON overview

JSON is a lightweight format for exchanging data between the client and server. It is often used in Ajax applications because of its simplicity and because its format is based on JavaScript object literals. We will start this lesson by learning JavaScript's object-literal syntax and then we will see how we can use JSON in an Ajax application.

Object Literals

We saw earlier how to create new objects in JavaScript with the Object() constructor. We also saw how we could create our constructors for our own objects. In this lesson, we'll examine JavaScript's literal syntax for creating arrays and objects.

Arrays

Array literals are created with square brackets as shown below:
var Beatles = ["Paul","John","George","Ringo"];
This is the equivalent of:
var Beatles = new Array("Paul","John","George","Ringo");

Objects

Object literals are created with curly brackets:
var Beatles = {
 "Country" : "England",
 "YearFormed" : 1959,
 "Style" : "Rock'n'Roll"
}
This is the equivalent of:
var Beatles = new Object();
Beatles.Country = "England";
Beatles.YearFormed = 1959;
Beatles.Style = "Rock'n'Roll";
Just as with all objects in JavaScript, the properties can be references using dot notation or bracket notation.
alert(Beatles.Style); //Dot Notation
alert(Beatles["Style"]); //Bracket Notation

Arrays in Objects

Object literals can contain array literals:
var Beatles = {
 "Country" : "England",
 "YearFormed" : 1959,
 "Style" : "Rock'n'Roll",
 "Members" : ["Paul","John","George","Ringo"]
}

Objects in Arrays

Array literals can contain object literals:
var Rockbands = [
 {
  "Name" : "Beatles",
  "Country" : "England",
  "YearFormed" : 1959,
  "Style" : "Rock'n'Roll",
  "Members" : ["Paul","John","George","Ringo"]
 },
 {
  "Name" : "Rolling Stones",
  "Country" : "England",
  "YearFormed" : 1962,
  "Style" : "Rock'n'Roll",
  "Members" : ["Mick","Keith","Charlie","Bill"]
 }
]

JSON

On the JSON website (http://www.json.org), JSON is described as:
  1. a lightweight data-interchange format
  2. easy for humans to read and write
  3. easy for machines to parse and generate
Numbers 1 and 3 are certainly true. Number 2 depends on the type of human. Experienced programmers will find that they can get comfortable with the syntax relatively quickly.

JSON Syntax

The JSON syntax is like JavaScript's object literal syntax except that the objects cannot be assigned to a variable. JSON just represents the data itself. So, the Beatles object we saw earlier would be defined as follows:
{
 "Name" : "Beatles",
 "Country" : "England",
 "YearFormed" : 1959,
 "Style" : "Rock'n'Roll",
 "Members" : ["Paul","John","George","Ringo"]
}

JSON Parsers

As JSON is just a string of text and not an object in and of itself, it needs to be converted to an object before to make it useful. Although this can be done in JavaScript with the eval() function, it is safer to use a JSON parser. You can download the JavaScript JSON parser at http://www.json.org/json.js. Including this file on a web page allows you to take advantage of the JSON object, which has the following very useful methods:
  • JSON.parse(strJSON) - converts a JSON string into a JavaScript object.
  • JSON.stringify(objJSON) - converts a JavaScript object into a JSON string.
The process for sending data between the browser and server with JSON is as follows:
  1. On the client-side:
    • Create a JavaScript object using the standard or literal syntax.
    • Use the JSON parser to stringify the object.
    • Send the URL-encoded JSON string to the server as part of the HTTP Request. This can be done using the HEAD, GET or POST method by assigning the JSON string to a variable. It can also be sent as raw text using the POST method, but this may create extra work for you on the server-side.
  2. On the server-side:
    • Decode the incoming JSON string and convert the result to an object using a JSON parser for the language of your choice. At http://www.json.org, you'll find JSON parsers for many modern programming languages. The methods available depend upon which parser you are using. See the parser's documentation for details.
    • Do whatever you wish with the object.
    • If you wish to send JSON back to the client:
      • Create a new object for storing the response data.
      • Convert the new object to a string using your JSON parser.
      • Send the JSON string back to the client as the response body (e.g, Response.Write(strJSON), echo $strJSON, out.write(strJSON) etc.).
  3. On the client-side:
    • Convert the incoming JSON string to an object using the JavaScript JSON parser.
    • Do whatever you wish with the object.
    • And so on...
The examples below show how to transfer data to the server using JSON. 

Code Sample: JSON/Demos/SendJson.html

<html>
<head>
<script type="text/javascript" src="../../prototype.js"></script>
<script type="text/javascript" src="../../json.js"></script>
<script type="text/javascript">
 function SendRequest(MSG)
 {
  document.getElementById("ResponseDiv").innerHTML="";
  var objJSON = {
   "msg" : MSG
  };
  var strJSON = encodeURIComponent(JSON.stringify(objJSON));
  new Ajax.Request("ReceiveJSON.jsp",
   {
    method: "post",
    parameters: "strJSON=" + strJSON,
    onComplete: Respond
   });
 }

 function Respond(REQ)
 {
  document.getElementById("ResponseDiv").innerHTML=REQ.responseText;
 }
</script>
<title>Using JSON</title>
</head>

<body>
<h1>Request</h1>
<form>
 <input type="button" value="Hi There!" onClick="SendRequest(this.value)"/>
 <input type="button" value="Good bye!" onClick="SendRequest(this.value)" />
</form>
<h1>Response</h1>
<div id="ResponseDiv">Waiting...</div>
</body>
</html>

Code Sample: JSON/Demos/ReceiveJSON.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" import="java.net.*,org.json.simple.*"%>
<%
 try
 {
  URLDecoder decoder = new URLDecoder();
  String strJSON = decoder.decode(request.getParameter("strJSON"));
  JSONObject objJSON = (JSONObject) JSONValue.parse(strJSON);
  
  String Message = objJSON.get("msg").toString();
  if (Message.equals("Hi There!"))
  {
   out.write("And hi there to you!");
  }
  else
  {
   out.write("Later Gator!");
  }
 }
 catch (Exception e)
 {
  out.write(e.toString());
 }
%>
Code Explanation
This code is relatively simple. The client-side script:
  • creates a simple JSON object with one property holding the passed in MSG string.
  • converts the JSON object to a string and encodes it.
  • passes the string as a parameter of our Ajax request (using Prototype).
  • outputs the responseText to the page.
The server-side script:
  • decodes the passed in string and converts it to a JSON object.
  • outputs an appropriate response.

Friday, June 24, 2011

ADO .NET Architecture

ADO .NET
Most applications need data access at one point of time making it a crucial component when working with applications. Data access is making the application interact with a database, where all the data is stored. Different applications have different requirements for database access. VB .NET uses ADO .NET (Active X Data Object) as it's data access and manipulation protocol which also enables us to work with data on the Internet. Let's take a look why ADO .NET came into picture replacing ADO.
Evolution of ADO.NET
The first data access model, DAO (data access model) was created for local databases with the built-in Jet engine which had performance and functionality issues. Next came RDO (Remote Data Object) and ADO (Active Data Object) which were designed for Client Server architectures but, soon ADO took over RDO. ADO was a good architecture but as the language changes so is the technology. With ADO, all the data is contained in a recordset object which had problems when implemented on the network and penetrating firewalls. ADO was a connected data access, which means that when a connection to the database is established the connection remains open until the application is closed. Leaving the connection open for the lifetime of the application raises concerns about database security and network traffic. Also, as databases are becoming increasingly important and as they are serving more people, a connected data access model makes us think about its productivity. For example, an application with connected data access may do well when connected to two clients, the same may do poorly when connected to 10 and might be unusable when connected to 100 or more. Also, open database connections use system resources to a maximum extent making the system performance less effective.
Why ADO.NET?
To cope up with some of the problems mentioned above, ADO .NET came into existence. ADO .NET addresses the above mentioned problems by maintaining a disconnected database access model which means, when an application interacts with the database, the connection is opened to serve the request of the application and is closed as soon as the request is completed. Likewise, if a database is Updated, the connection is opened long enough to complete the Update operation and is closed. By keeping connections open for only a minimum period of time, ADO .NET conserves system resources and provides maximum security for databases and also has less impact on system performance. Also, ADO .NET when interacting with  the database uses XML and converts all the data into XML format for database related operations making them more efficient.

The ADO.NET Data Architecture
Data Access in ADO.NET relies on two components: DataSet and Data Provider.
DataSet
The dataset is a disconnected, in-memory representation of data. It can be considered as a local copy of the relevant portions of the database. The DataSet is persisted in memory and the data in it can be manipulated and updated independent of the database. When the use of this DataSet is finished, changes can be made back to the central database for updating. The data in DataSet can be loaded from any valid data source like Microsoft SQL server database, an Oracle database or from a Microsoft Access database.
Data Provider
The Data Provider is responsible for providing and maintaining the connection to the database. A DataProvider is a set of related components that work together to provide data in an efficient and performance driven manner. The .NET Framework currently comes with two DataProviders: the SQL Data Provider which is designed only to work with Microsoft's SQL Server 7.0 or later and the OleDb DataProvider which allows us to connect to other types of databases like Access and Oracle. Each DataProvider consists of the following component classes:
The Connection object which provides a connection to the database
The Command object which is used to execute a command
The DataReader object which provides a forward-only, read only, connected recordset
The DataAdapter object which populates a disconnected DataSet with data and performs update

Data access with ADO.NET can be summarized as follows:
A connection object establishes the connection for the application with the database. The command object provides direct execution of the command to the database. If the command returns more than a single value, the command object returns a DataReader to provide the data. Alternatively, the DataAdapter can be used to fill the Dataset object. The database can be updated using the command object or the DataAdapter.

ADO .NET Data Architecture
Component classes that make up the Data Providers
The Connection Object
The Connection object creates the connection to the database. Microsoft Visual Studio .NET provides two types of Connection classes: the SqlConnection object, which is designed specifically to connect to Microsoft SQL Server 7.0 or later, and the OleDbConnection object, which can provide connections to a wide range of database types like Microsoft Access and Oracle. The Connection object contains all of the information required to open a connection to the database.
The Command Object
The Command object is represented by two corresponding classes: SqlCommand and OleDbCommand. Command objects are used to execute commands to a database across a data connection. The Command objects can be used to execute stored procedures on the database, SQL commands, or return complete tables directly. Command objects provide three methods that are used to execute commands on the database:
ExecuteNonQuery: Executes commands that have no return values such as INSERT, UPDATE or DELETE
ExecuteScalar: Returns a single value from a database query
ExecuteReader: Returns a result set by way of a DataReader object

The DataReader Object
The DataReader object provides a forward-only, read-only, connected stream recordset from a database. Unlike other components of the Data Provider, DataReader objects cannot be directly instantiated. Rather, the DataReader is returned as the result of the Command object's ExecuteReader method. The SqlCommand.ExecuteReader method returns a SqlDataReader object, and the OleDbCommand.ExecuteReader method returns an OleDbDataReader object. The DataReader can provide rows of data directly to application logic when you do not need to keep the data cached in memory. Because only one row is in memory at a time, the DataReader provides the lowest overhead in terms of system performance but requires the exclusive use of an open Connection object for the lifetime of the DataReader.
The DataAdapter Object
The DataAdapter is the class at the core of ADO .NET's disconnected data access. It is essentially the middleman facilitating all communication between the database and a DataSet. The DataAdapter is used either to fill a DataTable or DataSet with data from the database with it's Fill method. After the memory-resident data has been manipulated, the DataAdapter can commit the changes to the database by calling the Update method. The DataAdapter provides four properties that represent database commands:
SelectCommand
InsertCommand
DeleteCommand
UpdateCommand

When the Update method is called, changes in the DataSet are copied back to the database and the appropriate InsertCommand, DeleteCommand, or UpdateCommand is executed. 

Thursday, June 16, 2011

Using the Eval and Bind Method

Using the Eval Method



The Eval method evaluates late-bound data expressions in the templates of data-bound controls such as the GridView, DetailsView, and FormView controls. At run time, the Eval method calls the Eval method of the DataBinder
object, referencing the current data item of the naming container. The
naming container is generally the smallest part of the data-bound
control that contains a whole record, such as a row in a GridView control. You can therefore use the Eval method only for binding inside templates of a data-bound control.


The Eval method takes the
name of a data field and returns a string containing the value of that
field from the current record in the data source. You can supply an
optional second parameter to specify a format for the returned string.
The string format parameter uses the syntax defined for the Format method of the String class.



Using the Bind Method



The Bind method has some similarities to the Eval method, but there are significant differences. Although you can retrieve the values of data-bound fields with the Bind method, as you can with the Eval method, the Bind method is also used when data can be modified.


In ASP.NET, data-bound controls such as the gridview, detailsview, and formview
controls can automatically use the update, delete, and insert
operations of a data source control. For example, if you have defined
SQL Select, Insert, Delete, and Update statements for your data source
control, using Bind in a gridview, detailsview, or formview

control template enables the control to extract values from child
controls in the template and pass them to the data source control. The
data source control in turn performs the appropriate command for the
database. For this reason, the Bind function is used inside the EditItemTemplate or InsertItemTemplate of a data-bound control.


The Bind method is typically used with input controls such as the textbox control rendered by a gridview
row in edit mode. When the data-bound control creates these input
controls as part of its own rendering, it can extract the input values.

Wednesday, June 15, 2011

Asp.Net Basics

1. Explain the life cycle of an ASP .NET page.?

Following are the events occur during ASP.NET Page Life Cycle:



1)Page_PreInit

2)Page_Init

3)Page_InitComplete

4)Page_PreLoad

5)Page_Load

6)Control Events

7)Page_LoadComplete

8)Page_PreRender

9)SaveViewState

10)Page_Render

11)Page_Unload



Among above events Page_Render is the only event which is raised by page. So we can't write code for this event.



2. how does the cookies work in asp.net?

we know Http is an state-less protocol which is required for interaction between clinet and server .



so there is an need to remeber state of request raised by an web browser so that 

web server can recognize you have already previously visited or not.



There are two types of state management techniques:

a) Client side state management

b) Server - side statemanagement



Using cookies comes under clinet side statemanagement .In HttpResponse we write 

Cookie containing sessionId and other information within it.



when a browser made a request to the web server the same cookie is sent
to the server where server recognize the session id and get other
information stored to it previously.



3. What is Ispostback method in ASP.Net? Why do we use that??


Basically Post back is an action performed by a interactive Webpage.
When it goes to the server side for a non-client Operation Server again
posts it back to the client and hence the name.

Ex:



if(!IsPostBack)



will not allow the page to post back again n again bcoz it reduces the performance.



4. Can User Control be stored in library?.

I will say "NO"



there are 3 types of controls:

1) User Control

2) Custom Control

3) Web parts



you can reuse User control in the current project in which you have
built it, but you can't move it to other project as unless you just copy
paste the same file there and make the changes for that project ( which
violets the concept of library).



but custom control can be shared between projects. and you can
precompile them even as a dll, so this means you can use them in library
of any type.



5. what is the difference between application state and caching?

Application Object and Cached Object both falls under Server side State Management.



Application object resides in InProc i.e. on the same server where we hosted our application.

Cache Object resides on server side/ DownStream/Client Side.



Application Object will be disposed once application will stop.

Cache Object can be disposed using Time based cache dependency.



Only one user can access Application Object at a time hence we have to lock it every time we modify it.



6. what is boxing and unboxing?

Boxing is what happens when a value-type object is assigned to a reference-type variable.

Unboxing is what happens when a reference-type variable is assigned to a value-type variable.






7. What are the uses of Reflection??

Reflection is a concept using which we can 



1) Load assemblies dynamically

2) Invoke methods at runtime

3) Retriving type information at runtime.



8. What is the use of AutoWireup in asp.net?

AutoEventWireup attribute is used to set whether the events needs to be automatically generated or not.

In the case where AutoEventWireup attribute is set to false (by default)
event handlers are automatically required for Page_Load or Page_Init.
However when we set the value of the AutoEventWireup attribute to true
the ASP.NET runtime does not require events to specify event handlers
like Page_Load or Page_Init.



9. what events will occur when a page is loaded?

Below are the events occures during page load.



1) Page_PreInit

2) Page_Init

3) Page_InitComplete

4) Page_PreLoad



10. Where is the View state Data stored?

ViewState data is stored in the hidden field. When the page is submitted
to the server the data is sent to the server in the form of hidden
fields for each control. If th viewstate of the control is enable true
the value is retained on the post back to the client when the page is
post backed.



11. What is the difference between custom web user control and a custom web server control?

Web User Control:

1) Easy to Create.

2) It Can be used inside the same Application.(To use it in other application we need to add it to that project.)

3) It Can take advantage of Caching Technique.



Web Server Control:

1) Bit tuff to create as compare to User Control.

2) Easy to use.

3) Can be added to ToolBox.



12. Where do the Cookie State and Session State information be stored?

Cookie Information will be stored in a txt file on client system under a 

folder named Cookies. Search for it in your system you will find it.


Coming to Session State

As we know for every process some default space will be allocated by OS.


In case of InProc Session Info will be stored inside the process where our 

application is running.

In case of StateServer Session Info will be stored using ASP.NET State Service.

In case of SQLServer Session info will be stored inside Database. Default DB 

which will be created after running InstallSQLState Script is ASPState.


13. What is the difference between adding reference in solution Explorer and adding references by USING
?


Adding reference in solution explorer is
used to add the DLL for that project for reference only. If you want to
utilize that DLL methods/functions in our aspx.cs/.cs file etc you must
write using that nameclass library name in file.




14. What are the different types of sessions in ASP.Net? Name them.?

Session Management can be achieved in two ways



1)InProc

2)OutProc



OutProc is again two types

1)State Server

2)SQL Server



InProc

Adv.:

1) Faster as session resides in the same process as the application

2) No need to serialize the data


DisAdv.:

1) Will degrade the performance of the application if large chunk of data is stored

2) On restart of IIS all the Session info will be lost


State Server

Adv.:

1) Faster then SQL Server session management 

2) Safer then InProc. As IIS restart 

won't effect the session data


DisAdv.:

1) Data need to be serialized

2) On restart of ASP.NET State Service session info will be lost

3)Slower as compared to InProc


SQL Server

Adv.:

1) Reliable and Durable

2) IIS and ASP.NET State Service 

restart won't effect the session data

3) Good place for storing large chunk of data


DisAdv.:

1) Data need to be serialized

2) Slower as compare to InProc and State Server

3)Need to purchase Licensed 

version of SQL Serve


15. How do you design a website with multilingual support in ASP.NET?

Multilingual website can be created using Globalization and Localization.


Using Globalization we change the Currency Date Numbers etc to Language Specific Format.


To change the string which is there in the label button etc to language specific string we use Localization.


In Localization we have to create different Resource files for different languages.

During this process we use some classes present in System.Resources System.Globalization System.Threading namespaces.

16. What is caching? What are different ways of caching in ASP.NET?

Caching is a technique of persisting the data in memory for immediate
access to requesting program calls. This is considered as the best way
to enhance the performance of the application.



Caching is of 3 types:


Output Caching - Caches the whole page.

Fragment Caching - Caches a part of the page

Data Caching - Caches the data



17. What is meant by 3-tier architecture.

We generally split our application into 3-Layers

1)Presentation Layer ( Where we keep all web forms Master Pages and User Controls).

2)Business Layer (Where we keep business logic). e.g
Code related to manipulating data Custom Exception classes Custom
Control classes Login related code if any etc. etc.

3)Data Access Layer (Where we keep code used to
interact with DB). e.g. We can have the methods which are using SQL
Helper (Application Block).


18. Explain the basic functionality of garbage collector?

Garbage Collector in .Net Framework is used for Automatic Memory
Management i.e. it is collect all unused memory area and give to
application. system.gc.collect() is a method for release the memory. But
remember one think it is only an request i.e. we can't explicitly
release the memory by using system.gc.collect().


19. What is the difference between mechine.config and web.config?

machine.config is a system level configuration i.e it is applied on
all application in o/s that the configuration is set where as in
web.config it is applicable to only one application i.e each asp.net
webapplication will contain atleast on web.config file.


20. How can exception be handled with out the use of try catch?

using Exception Management application block


or

Page_error

Application_error objects


21. What is the difference between Response.Redirect and Server.Transfer.

Server.Transfer transfers page processing
from one page directly to the next page without making a round-trip back
to the client's browser. This provides a faster response with a little
less overhead on the server.Server.Transfer does not update the clients
url history list or current url. 


Response.Redirect is used toredirect the
user's browser to another page or site. This performs a trip back to the
client where the client's browser is redirected to the new page. The
user's browser history list is updated to reflect the new address.


22. Where the assembly is stored in asp.net?.

private are stored in application / bin directory and public are stored in GAC.


23. How we implement Web farm and Web Garden concept in ASP.NET?.

A web farm is a multi-server scenario. So we may have a server
in each state of US. If the load on one server is in excess then the
other servers step in to bear the brunt.

How they bear it is based on various models.

1. RoundRobin. (All servers share load equally)

2. NLB (economical)

3. HLB (expensive but can scale up to 8192 servers)

4. Hybrid (of 2 and 3).

5. CLB (Component load balancer).

A web garden is a multi-processor setup. i.e. a single server (not like the multi server above).

How to implement webfarms in .Net:

Go to web.config and

Here for mode you have 4 options.

a) Say mode inproc (non web farm but fast when you have very few customers).

b) Say mode StateServer (for webfarm)

c) Say mode SqlServer (for webfarm)

Whether to use option b or c depends on situation. StateServer
is faster but SqlServer is more reliable and used for mission critical
applications.

How to use webgardens in .Net:

Go to web.config and

Change the false to true. You have one more attribute that is related to webgarden in the same tag called cpuMask.


24. Is there any limit for query string? means what is the maximum size?..

Servers should be cautious about depending on URI lengths above 255
bytes because some older client or proxy implementations may not
properly support these lengths.


Query string length depends on browser compatability 



IE supports upto 255

Firefox supports upto 4000


25. What is the exact purpose of http handlers?

ASP.NET maps HTTP requests to HttpHandlers. Each HttpHandler
enables processing of individual HTTP URLs or groups of URL extensions
within an application. HttpHandlers have the same functionality as ISAPI
extensions with a much simpler programming model


Ex

1.Default HttpHandler for all ASP.NET pages ->ASP.NET Page Handler (*.aspx)

2.Default HttpHandler for all ASP.NET service pages->ASP.NET Service Handler (*.asmx)


An HttpHandler can be either synchronous or asynchronous. A
synchronous handler does not return until it finishes processing the
HTTP request for which it is called. An asynchronous handler usually
launches a process that can be lengthy and returns before that process
finishes

After writing and compiling the code to implement an
HttpHandler you must register the handler using your application's
Web.config file.

Monday, May 2, 2011

Differences Between ItemCreated, ItemDataBound and ItemCommand


Differences Between ItemCreated, ItemDataBound and ItemCommand

The important events raised by DataGrid, DataList, Repeater
  • ItemCreated
  • ItemDataBound
  • ItemComman
When
a datagrid, datalist or repeater is bound to a data source say a
dataset it consists of tables and each table consists of data rows. For
each record in the DataSource, a new DataWebControlNameItem instance is
created and appended to the Web Control. After the
DataWebControlNameItem has been created, its dataitem property is set to
the value of the current DataSource record.

The ItemCreated
event fires once for every DataWebControlNameItem added to the data Web
control. It fires before the DataWebControlNameItem's DataItem property
is assigned.

The ItemDataBound event also fires once for every
DataWebControlNameItem added to the data Web control, but this event
fires after the DataWebControlNameItem's DataItem property is assigned.


Finally, the ItemCommand event fires whenever the Command event for a
Button or LinkButton within the data Web control fires.

Wednesday, April 27, 2011

Application Domains for ASP.NET Programmers


When we launch the Notepad program in Windows, the program executes inside of a container known as a process. We can launch multiple instances of Notepad, and each instance will run in a dedicated process. Using the Task Manager application, we can see a list of all processes currently executing in the system.

A process contains the executable code and data of a program inside memory it has reserved from the operating system. There will be at least one thread executing instructions inside of the process, and in most cases there are multiple threads. If the program opens any files or other resources, those resources will belong to the process.

A process is also boundary. Erroneous code inside of a process cannot corrupt areas outside of the current process. It is easy to communicate inside of a process, but special techniques are required to communicate from one process to another. Each process also runs under a specific security context which can dictate what the process can do on the machine and network. 

A process is the smallest unit of isolation available on the Windows operating system. This could pose a problem for an ISP who wants to host hundreds of ASP.NET applications on a single server. The ISP will want to isolate each ASP.NET application to prevent one application from interfering with another company’s application on the same server, but the relative cost of launching and executing a process for hundreds of applications may be prohibitive.

Introducing the Application Domain

.NET introduces the concept of an application domain, or AppDomain. Like a process, the AppDomain is both a container and a boundary. The .NET runtime uses an AppDomain as a container for code and data, just like the operating system uses a process as a container for code and data. As the operating system uses a process to isolate misbehaving code, the .NET runtime uses an AppDomain to isolate code inside of a secure boundary.

Note, however, that the application domain is not a secure boundary when the application runs with full trust. Applications running with full trust can execute native code and circumvent all security checks by the .NET runtime. ASP.NET applications run with full trust by default.

An AppDomain belongs to only a single process, but single process can hold multiple AppDomains. An AppDomain is relatively cheap to create (compared to a process), and has relatively less overhead to maintain than a process. For these reasons, an AppDomain is a great solution for the ISP who is hosting hundreds of applications. Each application can exist inside an isolated AppDomain, and many of these AppDomains can exist inside of a single process – a cost savings.

AppDomains And You

You’ve created two ASP.NET applications on the same server, and have not done any special configuration. What is happening?

A single ASP.NET worker process will host both of the ASP.NET applications. On Windows XP and Windows 2000 this process is named aspnet_wp.exe, and the process runs under the security context of the local ASPNET account. On Windows 2003 the worker process has the name w3wp.exe and runs under the NETWORK SERVICE account by default.

An object lives in one AppDomain. Each ASP.NET application will have it’s own set of global variables: Cache, Application, and Session objects are not shared. Even though the code for both of the applications resides inside the same process, the unit of isolation is the .NET AppDomain. If there are classes with shared or static members, and those classes exist in both applications, each AppDomain will have it’s own copy of the static fields – the data is not shared. The code and data for each application is safely isolated and inside of a boundary provided by the AppDomain

In order to communicate or pass objects between AppDomains, you’ll need to look at techniques in .NET for communication across boundaries, such as .NET remoting or web services.

Note again: the one caveat to the idea of an AppDomain as a boundary is that ASP.NET applications will run with full trust by default. Fully trusted code can execute native code, and native code can essentially have access to anything inside the process. You’ll need to run applications with partial trust to restrict access to unmanged code and verify all managed code to secure AppDomains.

Shadow Copies and Restarts

Once an assembly is loaded into an AppDomain, there is no way to remove the assembly from the AppDomain. It is possible, however, to remove an AppDomain from a process.

If you copy an updated dll into an application’s bin subdirectory, the ASP.NET runtime recognizes there is new code to execute. Since ASP.NET cannot swap the dll into the existing AppDomain , it starts a new AppDomain. The old application domain is “drain stopped”, that is, existing requests are allowed to finish executing, and once they are all finished the AppDomain can unload. The new AppDomain starts with the new code and begins taking all new requests.

Typically, when a dll loads into a process, the process locks the dll and you cannot overwrite the file on disk. However, AppDomains have a feature known as Shadow Copy that allows assemblies to remain unlocked and replaceable on disk.

The runtime initializes ASP.NET with Shadow Copy enabled for the bin directory. The AppDomain will copy any dll it needs from the bin directory to a temporary location before locking and loading the dll into memory. Shadow Copy allows us to overwrite any dll in the bin directory during an update without taking the web application offline.

Master Of Your Domain

Application domains replace the OS process as the unit of isolation for .NET code. An understanding of application domains will give you an idea of the work taking place behind the scenes of an ASP.NET application. Using the CurrentDomain property of the AppDomain class you can inspect properties about the AppDomain your code is executing in, including the Shadow Copy settings we discussed in this article.

Thursday, April 21, 2011

MVC Tutorial

MVC Architecture Model In ASP.NET


When developing ASP.NET applications the need of reducing code
duplication increases along with their complexity. This is because
testing and performing changes become very difficult tasks when having
many different sources of code with the same functionality.

Model View Controller architecture (or pattern) allows us to separate
different parts of our applications into tiers to fulfill this need.


MVC Overview


Model View Controller architecture aims to separate an application into three parts:


Model: It is the business logic of an application. From an
object oriented perspective it would consist of a set of classes that
implement the critical functionality of an application from a business
point of view.


View: It can consist of every type of interface given to the
user. In ASP.NET the view is the set of web pages presented by a web
application.


Controller: This part of the architecture is the most
difficult to explain, hence the most difficult to implement in many
platforms. The controller is the object that allows the manipulation of
the view. Usually many applications implement Model-Controller tiers
that contain the business logic along with the necessary code to
manipulate a user interface. In an ASP.NET application the controller is
implicitly represented by the code-behind or the server side code that
generates the HTML presented to the user.


Implementing MVC in ASP.NET


A basic diagram that would help us understand perfectly the specific
parts that implement the Model View Controller architecture in an
ASP.NET application is presented below:


MVC implementation in ASP.NET

MVC Model Implementation


When implementing the business logic of an application it is a must
to use a Class Library project in order to generate a .dll file that
will encapsulate all the functionality. This is critical as we as
professional developers would not like to jeopardize the source code of a
software product by placing the actual .cs files as a reference in a
web application.


This type of project can be easily created in Visual Studio 2005 under the Visual C# or Visual Basic tabs:


Creating a Class Library Project

As a tutorial example we will develop a simple calculator under a new namespace we will call "Math".


Once the project is created we will add a class called Calculator:


Adding Calculator class

As the code is very simple and a sample is provided in this tutorial
we will not get into much detail as far as how it is developed. The only
important thing we need to mention is the way errors have to be handled
in this class. Take a look at the following code:


1. protected
float Divide(float
fNumber1, float fNumber2)


2. {

3.
  if (fNumber2 == 0)


4.
 {


5.    
      throw
new Exception(
"Second number cannot be equal to zero.");


6.    }


7.
  return
(fNumber1 / fNumber2);


8. }

When implementing the Divide function we need to ensure that the user
would not be able to set the "fNumber2" parameter (line 1) to zero as a
division between zero does not exist. The validation statement in lines
3-6 takes care of this case but the important fact we need to notice is
that this class will NEVER use specific methods to present errors like
message boxes or writing into labels. Errors captured in the model part
of the architecture ALWAYS have to be presented in the form of
exceptions (line 5). This will allow us to use this object in several
types of applications like ASP.NET applications, Windows applications,
Web services, etc.


Once we have finished coding our Calculator class the project has to
be built in order to get the .dll file we will use in our Web
application.


MVC View-Controller Implementation


The View and the Controller objects will be implemented by using a
common ASP.NET Website. Once we have created our project we need to add
the reference to the .dll file we created before.


The option to do this can be found in the context menu when right-clicking the project in the solution explorer:


Adding the a reference

We can find the file in the path "\bin\Release" (or "\bin\Debug"
depending on how you build your class library) inside our main folder
containing the math class library project:


Adding Math.dll reference

Once we have referenced our library we will create a simple web page
that will allow us to choose between the four basic arithmetic
operations and type two different numbers to operate.


The web page will look like this:


Calculator Web page

In the code behind we need to reference the Math namespace in order
to use our Calculator class. The following statement will do that:


using Math;


As the code for this application is also simple we will only explain the method called when the "Operate!" button is clicked:


1. protected
void btnOperate_Click(object
sender, EventArgs e)


2. {

3.
  if
(pbValidateNumbers())


4.
  {


5.
       Calculator
cOperator = new
Calculator();


6.
        
try


7.
        {


8.
              txtResult.Text
= cOperator.Operate(float.Parse(txtNumber1.Text.Trim()),
float.Parse(txtNumber2.Text.Trim()),
Convert.ToInt16(rblOperations.SelectedValue)).ToString();


9.
              
lbError.Text
= "";

10.
       }


11.
       catch (Exception
ex)



12.
       {


13.
             txtResult.Text
= "";


14.
             lbError.Text
= ex.Message;


15.
       }


16.
 }


17.}


In line 3 we call the bool function "pbValidateNumbers" that will
return true if the numbers typed in both textboxes are valid. These
types of validations have to be performed by the controller object as
they allow the interface to work properly and have nothing to do with
the business logic.

In line 5 we create an instance of our Calculator class so we can
perform the arithmetic operation. We call the method "Operate" (line 8)
and return the value in another textbox. An important thing to mention
is that we have to use a try-catch statement (lines 6-15) to handle any
exception that could be thrown by our method "Operate" as every error
caught in our Calculator class is handled by throwing a "digested"
exception that is readable to the user.


In the code above we can appreciate how well encapsulated the
business logic is, hence it can be reused in several applications
without having to code it again.


Advantages of using MVC in ASP.NET


  • There's no duplicated code.

  • The business logic is encapsulated; hence the controller code is transparent and safer.

  • The business logic can be used in several front ends like Web pages, Web services, Windows applications, services, etc.

  • Exception handling is well managed showing the user only digested error messages.

  • Testing every part of an application is easier as it can be done separately using automated methods.

  • Application changes are easier to apply as they are focused in one part of the architecture only.

Saturday, April 9, 2011

What is CLR in .NET?

What is CLR in .NET?
Common Language Runtime - It is the implementation of CLI. The core runtime engine in the Microsoft .NET Framework for executing applications. The common language runtime supplies managed code with services such as cross-language integration, code access security, object lifetime management, resouce management, type safety, pre-emptive threading, metadata services (type reflection), and debugging and profiling support. The ASP.NET Framework and Internet Explorer are examples of hosting CLR.

The CLR is a multi-language execution environment. There are currently over 15 compilers being built by Microsoft and other companies that produce code that will execute in the CLR.

The CLR is described as the "execution engine" of .NET. It's this CLR that manages the execution of programs. It provides the environment within which the programs run. The software version of .NET is actually the CLR version.

When the .NET program is compiled, the output of the compiler is not an executable file but a file that contains a special type of code called the Microsoft Intermediate Language (MSIL, now called CIL, Common Intermediate Language). This MSIL defines a set of portable instructions that are independent of any specific CPU. It's the job of the CLR to translate this Intermediate code into a executable code when the program is executed making the program to run in any environment for which the CLR is implemented. And that's how the .NET Framework achieves Portability. This MSIL is turned into executable code using a JIT (Just In Time) complier. The process goes like this, when .NET programs are executed, the CLR activates the JIT complier. The JIT complier converts MSIL into native code on a demand basis as each part of the program is needed. Thus the program executes as a native code even though it is compiled into MSIL making the program to run as fast as it would if it is compiled to native code but achieves the portability benefits of MSIL.

WCF Tutorial

Windows Communication Foundation (WCF)

Windows Communication Foundation (WCF) is a dedicated communication framework provided by Microsoft. WCF is a part of .NET 3.0. The runtime environment provided by the WCF enables us to expose our CLR types as services and to consume other existing services as CLR types.
Background:

In the world there are a lot of distributed communication technologies that exist. Some of them are:

  • ASP.NET Web Services (ASMX)
  • Web Services Enhancements (WSE)
  • Messaging (MSMQ)
  • .NET Enterprise Services (ES)
  • .NET Remoting
ExistingTechnologies.gif

Creating and Consuming a Sample WCF Service:


Three major steps are involved in the creation and consumtion of the WCF services. Those are:
  1. Create the Service.(Creating)
  2. Binding an address to the service and host the Service. (Hosting)
  3. Consuming the Service.(Consuming)

Step 1: Creating the Service

In WCF, all services are exposed as contracts. A contract is a neutral way of describing what the service does. Mainly we have four types of contracts:
  1. Service Contract
    This contract describes all the available operations that a client can perform on the service.
    .Net uses "System.ServiceModel" Name space to work with WCF services.

    ServiceContract attribute is used to define the service contract. We can apply this attribute on class or interface. ServiceContract attribute exposes a CLR interface (or a class) as a WCF contract.
    OperationContract attribute, is used to indicate explicitly which method is used to expose as part of WCF contract. We can apply OperationContract attribute only on methods, not on properties or indexers. 
    [ServiceContract] applies at the class or interface level. [OperatiContract] applies at the method level.
  2. Data ContractThis contract defines the data types that are passed into and out of the service.
    [DataContract] attribute is used at the custom data type definition level, i.e. at class or structure level.[DataMember] attribute is used for fields, properties, and events.
  3. Fault Contract
    This contract describes about the error raised by the services.
    [FaultContract(<<type of Exception/Fault>>)] attribute is used for defining the fault contracts.
  4. Message Contracts
    This contract provides the direct control over the SOAP message structure. This is useful in inter-operability cases and when there is an existing message format you have to comply with.
    [MessageContract] attribute is used to define a type as a Message type. [MessageHeader] attribute is used for those members of the type we want to make into SOAP headers[MessageBodyMember] attribute is used for those members we want to make into parts of the SOAP body of the message. 

Sample Service Creation :
[ServiceContract]
          public interface IFirstWCFService
                    {
                   [OperationContract]
                   int Add(int x, int y);
 
 
                   [OperationContract]
                   string Hello(string strName);
                  
                  int Multiplication(int x, int y);
                   }
Here "IFirstWCFService" is a service exposed by using the servicecontract attribute. This service exposes two methods "Add","Hello" by using the [OperationContract] attribute. The method "Multiplication" is not exposed by using the [OperationContract] attribute. So it wnt be avlible in the WCF service.
public class FrtWCFService : IFirstWCFService
    {
        public int Add(int x, int y)
        {
            return x + y;
        }
 
        public string Hello(string strName)
        {
            return "WCF program  : " + strName;
        }
 
        public int Multiplication(int x, int y)
        {
            return x * y;
        }
 
    }
"FrtWCFService" is a class,which implements the interface "IFirstWCFService". This class definse the functionality of methods exposed as services. 


STEP 2:  Binding and Hosting

Each service has an end point. Clients communicates with this end points only. End point describes 3 things :
  1. Address
  2. Binding type
  3. Contract Name (which was defined in STEP 1)


Endpoints.GIF
Address

Every service must be associated with a unique address. Address mainly contains the following  two key factors :
  1. Transport protocal used to communicate between the client proxy and service.
    WCF supports the following transport machinisams:
    • HTTP   (ex : http://  or https:// )
    • TCP     (ex :  net.tcp :// )
    • Peer network   (ex: net.p2p://)
    • IPC (Inter-Process Communication over named pipes) (ex: net.pipe://)
    • MSMQ  (ex: net.msmq://)

  2. Location of the service. Location of the service describes the targeted machine (where service is hosted) complete name (or) path  and optionally port / pipe /queue name.  Example :   localhost:8081  Here local host is the target machine name. 8081 is the optional port number.  Example 2:  localhostThis is with out optional parameter. 

Here are a few sample addresses:
 
 
http://localhost:8001
http://localhost:8001/MyFirstService
net.tcp://localhost:8002/MyFirstService
net.pipe://localhost/MyFirstPipe
net.msmq://localhost/MyFirstService
net.msmq://localhost/MyFirstService
Binding is nothing but a set of choices regarding the  transport protocol (which transport protocal we have to use : http /tcp /pipe etc.) ,message encoding (tells about the message encdong / decoidng technique)  ,communication pattern (whether communication is asynchronous, synchronous,  message queued etc.) , reliability, security, transaction propagation, and interoperability.
WCF defines the nine basic bindings:
Binding Type .Net Class implements this binding Transport Encoding Inter operable Comments
Basic Binding BasicHttpBinding Http / Https Text / MTOM Yes Used to expose a WCF service as a legacy ASMX web service.
TCP binding NetTcpBinding TCP Binary NO TCP is used for cross-machine communication on the intranet.
Peer network binding NetPeerTcpBinding P2P Binary NO In this peer network transport schema is used to communicate.
IPC binding NetNamedPipeBinding IPC Binary NO This uses named pipes as a transport for same-machine communication. It is the most secure binding since it cannot accept calls from outside the machine.
WSbinding WSHttpBinding Http / Https Text / MTOM Yes This uses Http / Https as a communication schema.
Federated WS binding WSFederationHttpBinding Http / Https Text / MTOM Yes This is a specialization of the WS binding. This offers the support for federated security
Duplex WS binding WSDualHttpBinding Http Text / MTOM Yes This is a WS binding with bidirectional communication support from the service to the client.
MSMQ binding NetMsmqBinding MSMQ Binary NO This supports for disconnected queued calls
MSMQ integration binding MsmqIntegrationBinding MSMQ Binary Yes This is designed to interoperate with legacy MSMQ clients.

Hosting:
Every service must be hosted in a host process. Hosting can be done by using the
  • IIS
  • Windows Activation Service (WAS)
  • Self hosting
     

Hosting Type Advantages Limitations
IIS Hosting IIS manages the life cycle of host process. ( like application pooling, recycling, idle time management, identity management, and isolation) Only HTTP transport schemas WCF service are hosted in IIS.
WAS Hosting
  • WAS supports for all available WCF transports, ports, and queues.
  • WAS manages the life cycle of host process.
Some adv of self hosted processing is missing.
Self Hosting
  • Developer can have explicit control over opening and closing the host.
  • In-Proc hosting can be done.
Missing the host process life cycle management.


IIS Hosting
IIS hosting is the same as hosting the traditional web service hosting. Create a virtual directory and supply a .svc file.
In Vs2008 select a project type: "WCF Service Application". 
ProjectType.GIF

In the solution explorer, under the App_code folder you can find the two files: "IService.cs" and "Service.cs".

"IService.cs" class file defines the contracts. "Service.cs" implements the contracts defined in the "IService.cs". Contracts defined in the "IService.cs" are exposed in the service. 

Check in the Web.Config file, under <system.serviceModel> section: 
<services>
      <service name="Service" behaviorConfiguration="ServiceBehavior">
        <!-- Service Endpoints -->
        <endpoint address="" binding="wsHttpBinding" contract="IService">
          <!--
              Upon deployment, the following identity element should be removed or replaced to reflect the
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity
              automatically.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services> In this one , end point node specifies the : address, binding type, contract (this is the name of the class that defines the contracts.)
Another end point node endpoint address="mex" specify about the Metadata end point for the service.
Now host this serivce by creating the virtual directory and browse the *.SVC file: 

IISHosting.GIF
 
Hosting with Windows Activation Service (WAS)

WAS is a part of IIS 7.0. It comes with VISTA OS. The hosting with the Windows Activation Service is same as hosting with IIS. The only difference between these two is, IIS supports for HTTP binding only. Whereas WAS supports for all transport schemas.

Self Hosting
In this technique developer is only responsible for providing and managing the life cycle of the host process. In this one host service must be running before the client calls the service.  To host the service we use the .NET class ServiceHost.  We have to create an instance of the "ServiceHost".  Constructor of this class takes two parameters: service type, base address. (Base address can be empty set.)
Uri baseaddress = new Uri("http://localhost:8080");
ServiceHost srvHost = new
ServiceHost(typeof(WCFService.FrtWCFService),baseaddress);


Add the Service End points to the host :

We will use the AddServiceEndpoint() to add an end point to the host. As we are that end point contains three things:  type of service, type of binding, service Name.
So, AddServiceEndpoint() method accepts these three as the required parameters.
srvHost.AddServiceEndpoint(typeof(WCFService.IFirstWCFService), new BasicHttpBinding(), "FirstWCFService");

Adding the Meta Data End points to the host:
For the Meta data, service type will be: typeof(IMetadataExchange)
srvHost.AddServiceEndpoint(typeof(IMetadataExchange), httpBinding, "MEX");
Up to Now, we have created the host process and added the end points to it. Now call the open() method on the host. By calling the Open( ) method on the host, we allow calls in, and by calling the Close( ) method, we stylishly exit the host instance, that means, allowing calls in progress to complete, and yet refusing future new client calls even if the host process is still running
srvHost.Open();

STEP 3: Consuming the Service

With WCF, the client always communicates with the proxy only. Client never directly communicates with the services, even though the service is located on the same machine. Client communicates with the proxy; proxy forwards the call to the service.  Proxy exposes the same functionalities as Service exposed.

ServiceBoundaries.GIF
  
Consuming WCF Service Hosted by IIS/WAS

Consuming WCF service is a very similar way of consuming a web service by using the proxy. To consume the service, in the solution explorer click on "Add service Reference" and add the service created in the STEP1.

AddServiceRef.GIF 



AddServiceRef_2.GIF

A service reference is created under the service reference folder. Use this proxy class to consume the WCF service as we are doing with web services.
ServiceReference1.FirstWCFServiceClient obj = new                 
             UsingWCFService.ServiceReference1.FirstWCFServiceClient();
 
Console.WriteLine(obj.Add(2, 3).ToString());
 
obj.Close();

Alternatively: We can create  the proxy class by using the following command
svcutil.exe [WCFService Address]

This generates a service proxy class, just include this class in to the solution and consume the service.

Consuming by creating the channel factory:

We can consume the service by creating the channel factory manually. While creating the channel, we have to provide the same binding type and end point address where the service is hosted.
IFirstWCFService chnl = new ChannelFactory<IFirstWCFService>
(new BasicHttpBinding(), new EndpointAddress("http://localhost:8080/MYFirstWCFService")).CreateChannel();
Here IFirstWCFService is the service contract interface, that is exposed.