<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3814652895914324464</id><updated>2011-10-03T07:50:01.150-07:00</updated><category term='Web Development'/><category term='ASP Classic v/s ASP.NET'/><category term='WCF Duplex Messaging'/><category term='Ajax development'/><title type='text'>Hire dedicated asp, asp.net, php, c# programmers</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hireinindia.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3814652895914324464/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hireinindia.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rambhupal</name><uri>http://www.blogger.com/profile/14984083230995512459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/-Zo7dhr1qbOI/TfXhB0EMIKI/AAAAAAAAAAw/3SFqn-eYCZc/s220/ram.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3814652895914324464.post-6522799295078504169</id><published>2011-01-05T22:56:00.000-08:00</published><updated>2011-01-05T22:57:32.741-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF Duplex Messaging'/><title type='text'>WCF Duplex Messaging</title><content type='html'>I am one of the moderators of the MSDN WCF Forum. One of the main areas of questions on the forum is duplex messaging – particularly using the WSDualHttpBinding. So instead of typing long messages repeating the same thing in answer to these questions I’ve decided to write this blog post to give a bit of background about duplex messaging and then discuss the options for bindings and common problems people have.&lt;br /&gt;What is Duplex Messaging?&lt;br /&gt;&lt;br /&gt;There are many ways that messages can be exchanged between two parties in a service based system: the client can send messages to the server and never get any back; the client can send a message and wait for a response; the client and service can send eachother messages without any pre-defined pattern; the client can send the service a message but not wait synchronously for a response and then then service can send a message back asynchronously; and there are many others. However, the first three of these are supported natively in WCF and are known as One-way, request/response and duplex.&lt;br /&gt;&lt;br /&gt;So Duplex messaging is where, unsolicited, the client and service can send eachother messages. Most commonly this is characterized by the service sending the client “events” or notifications or progress of “interesting things”.&lt;br /&gt;Duplex Contracts in WCF&lt;br /&gt;&lt;br /&gt;To send messages to eachother the client and service must have an idea of what operations are available and what messages are sent and received during the communication. In WCF this idea is modelled by the contract. Now normally a contract just determines what functionality is available at the service. However, now the service is going to be sending messages to the client that the client isn’t specifically waiting for so it needs an idea of what messages the client can deal with. So we need a contract that models both directions of the conversation.&lt;br /&gt;&lt;br /&gt;A bi-directional contract is modelled using two interfaces bound together with a ServiceContract – like this:&lt;br /&gt;&lt;br /&gt;[ServiceContract(CallbackContract=typeof(IPizzaProgress))]&lt;br /&gt;&lt;br /&gt;interface IOrderPizza&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    [OperationContract]&lt;br /&gt;&lt;br /&gt;    void PlaceOrder(string PizzaType);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;interface IPizzaProgress&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    [OperationContract]&lt;br /&gt;&lt;br /&gt;    void TimeRemaining(int minutes);&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    [OperationContract]&lt;br /&gt;&lt;br /&gt;    void PizzaReady();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;The import bit here is the CallbackContract that establishes the relationship between the service’s and client’s contracts.&lt;br /&gt;Writing the Service&lt;br /&gt;&lt;br /&gt;The service is implemented normally apart from two issues: firstly it needs to access the callback contract to be able to send messages back to the client; secondly the communication infrastructure (modelled by the binding) needs to be able to cope with duplex messaging. Firstly lets look at accessing the callback contract:&lt;br /&gt;&lt;br /&gt;class PingService : IOrderPizza&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    IPizzaProgress callback;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    public void PlaceOrder(string PizzaType)&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        callback = OperationContext.Current.GetCallbackChannel();&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;        Action preparePizza = PreparePizza;&lt;br /&gt;&lt;br /&gt;        preparePizza.BeginInvoke(ar =&gt; preparePizza.EndInvoke(ar), null);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    void PreparePizza()&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        for (int i = 10 - 1; i &gt;= 0; i--)&lt;br /&gt;&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            callback.TimeRemaining(i);&lt;br /&gt;&lt;br /&gt;            Thread.Sleep(1000);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        callback.PizzaReady();&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;The critical line here is calling GetCallbackContract on the OperationContext. This gives the service access to a proxy to call back to the client.&lt;br /&gt;&lt;br /&gt;Now the service also needs to use a contract that is compatible with duplex messaging. WSHttpBinding is the default for the built in WCF projects but it does not support duplex messaging. People generally then move to the WSDualHttpBinding which is similar to the WSHttpBinding but does support duplex. I will go into more depth about bindings for duplex shortly but for now lets stick to this for now - it will work in our test rig on a single machine without issue.&lt;br /&gt;Writing the Client&lt;br /&gt;&lt;br /&gt;If the client is going to receive these messages it needs to provide an implementation of the callback contract. It can gets its definition from either a shared contract assembly or from metadata. If using metadata the callback contract will be named the same as the service’s contract but with the work Callback appended. It will also need to supply this implementation to the WCF infrastructure and it does this by wrapping an instance in an InstanceContext object and passing it to the proxy constructor. So here is the client:&lt;br /&gt;&lt;br /&gt;class Program&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    static void Main(string[] args)&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        InstanceContext ctx = new InstanceContext(new Callback());&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;        OrderPizzaClient proxy = new OrderPizzaClient(ctx);&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;        proxy.PlaceOrder("Pepperoni");&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;        Console.WriteLine("press enter to exit");&lt;br /&gt;&lt;br /&gt;        Console.ReadLine();&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;class Callback : IOrderPizzaCallback&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    public void TimeRemaining(int minutes)&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        Console.WriteLine("{0} seconds remaining", minutes);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    public void PizzaReady()&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        Console.WriteLine("Pizza is ready");&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Running the service and the client will have this working quite happily – so it would seem that duplex messaging and WCF works very well … so why on earth do people keep asking questions about it on the WCF forums?&lt;br /&gt;It Worked on My Machine but Broke when we Deployed It!&lt;br /&gt;&lt;br /&gt;Ahh well you probably did the thing that is obvious but almost always a bad idea. You went and chose WSDualHttpBinding as your duplex binding. To understand why this is a bad idea we need to dig a little deeper into how the WSDualHttpBinding works. HTTP is a unidirectional protocol: the client makes a request and the server sends a response. There is no way for a server to initiate an exchange with the client. So how on earth is duplex messaging going to work because it requires exactly this facility? Well the “Dual” in the name is significant, the WSDualHttpBinding actually consists of two connections: one outbound from client to server and one inbound from server to client – this second connection may already be ringing alarm bells with you. The are a two big problems with inbound connections to a client: firewalls very often block inbound connections to clients; the client may not be reachable from the server, it may be using NAT translation behind a router and so cannot be contacted without port forwarding being set up on the router. Both of these issues are showstoppers in real network topologies. You can take some small steps to help – you can specify what port the client should listen on for example by using the clientBaseAddress property of the WSDualHttpBinding. This means the network admin will only have to punch one hole in their firewall (but lets face it, network admins don’t allow any holes to be punched in the firewall).&lt;br /&gt;&lt;br /&gt;So if you really shouldn’t use WSDualHttpBinding for duplex, what should you use instead? Well NetTcpBinding supports duplex out of the box and the nice thing about this is that the outbound connection that it establishes can also be used be used for inbound traffic – suddenly we don;t have the inbound connection firewall/NAT issues. “But hold on, isn’t NetTcpBinding for intranet? I’ve read books that tell me that in their ‘which binding should I use?’ flowcharts!” Well it turns out those flowcharts are talking rubbish – NetTcpBinding works very happily over the internet, its just not interoperable by design. “Aha! but I need interop so WSDualHttpBinding is for me!” Well unfortunately not, NetTcpBinding is non-interoperable by design, WSDualHttpBinding is non-interoperable despite its design. From the name it would suggest interoperability but  Arun Gupta from Sun wrote this excellent post describing why it wasn’t.&lt;br /&gt;&lt;br /&gt;So now seeing that we really are not talking about interop anyway, NetTcpBinding is far more useful than WSDualHttpBinding. Its not bullet proof, if the firewall only allows outbound port 80 but also allows inbound port 80, then WSDualHttpBinding would work where NetTcpBinding wouldn’t – but in this situation we’re really talking server to server and so I’d argue its probably better to roll your own bidirectional communication with two standard HTTP based connections.&lt;br /&gt;&lt;br /&gt;The final option you have for duplex communication is to add a piece of infrastructure into the mix. The .NET Services Service Bus (part of the Azure platform) allows two parties to exchange messages both making outbound connections – potentially even using HTTP port 80. The two outbound connections rendezvous in the Service Bus which mediates their message exchanges. If the receiver has had to use outbound port 80 then it polls to receive message bound for it.&lt;br /&gt;It Worked for the First 10 Clients and then the Rest Timed Out!&lt;br /&gt;&lt;br /&gt;Irrespective if which of the standard bindings you are using, duplex assumes a constant relationship between proxy and service. In WCF this idea is modelled by the concept of session. All duplex bindings require session. A while back I wrote in some detail about sessions. You will have to either put up with increasing the session throttle (see the linked article for details) or roll your own custom binding that can do duplex without session – you can find an example of this here.&lt;br /&gt;I Use the Callback While the Client is calling the Service and it Deadlocks!&lt;br /&gt;&lt;br /&gt;This is because your client is probably a Rich Client GUI based application (Windows Forms or WPF). To understand why this is a problem we need to step back briefly and look at UI clients, threading and WCF threading. UI applications have a rule: you must only update the UI from the thread that created those UI components. In general a GUI application has one UI thread so anything that changes the UI needs to be done from that thread. .NET 2.0 introduced a new construct to simplify the process of a background thread updating the UI: SynchronizationContext. The idea is that a UI framework creates an implementation of a SynchronizationContext derived class that handles the mechanics of marshalling a call on to the UI thread. An instance of this implementation is then made available on the UI and accessible via the SynchronizationContext.Current.&lt;br /&gt;&lt;br /&gt;WCF adds more complexity into the mix by enforcing a rule that says “unless you tell me otherwise I will only allow one thread at a time into an object that I control”. You see this with singleton services that will only allow one call at a time by default. The same is also true of the callback implementation object – so WCF will only allow one active thread in the client at a time. So while WCF is performing an outbound call it will not allow an inbound call into the object. This causes the initial problem with the deadlock that the service’s callback cannot be dispatched while the client’s outbound call is in progress. To solve this we use the “unless you tell me otherwise” part of the above rule. You do this by annotating the callback implementation class with a [CallbackBehavior] attribute like this:&lt;br /&gt;&lt;br /&gt;[CallbackBehavior(ConcurrencyMode=ConcurrencyMode.Reentrant)]&lt;br /&gt;&lt;br /&gt;class Callback : IOrderPizzaCallback&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    public void TimeRemaining(int minutes)&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        Console.WriteLine("{0} seconds remaining", minutes);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    public void PizzaReady()&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        Console.WriteLine("Pizza is ready");&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;But now there is another problem: by default WCF will attempt to dispatch using an available SynchronizationContext. The problem with this callback is the UI thread is already blocked in an outbound call. SO for the call to dispatch we need to tell WCF not to use the SynchronizationContext – again using the CallbackBehavior attribute:&lt;br /&gt;&lt;br /&gt;[CallbackBehavior(ConcurrencyMode=ConcurrencyMode.Reentrant, UseSynchronizationContext=false)]&lt;br /&gt;&lt;br /&gt;class Callback : IOrderPizzaCallback&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    ...&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Now the issue is of course that the call is going to be processed on a non UI thread so you would have to manually marshal any UI interaction using the SynchronizationContext.Post method.&lt;br /&gt;&lt;br /&gt;Duplex messaging can be a useful message exchange pattern but in WCF there can be some unexpected issues. Hopefully this blog post clarifies those issues and demonstrates workarounds for them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3814652895914324464-6522799295078504169?l=hireinindia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hireinindia.blogspot.com/feeds/6522799295078504169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3814652895914324464&amp;postID=6522799295078504169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3814652895914324464/posts/default/6522799295078504169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3814652895914324464/posts/default/6522799295078504169'/><link rel='alternate' type='text/html' href='http://hireinindia.blogspot.com/2011/01/wcf-duplex-messaging.html' title='WCF Duplex Messaging'/><author><name>Rambhupal</name><uri>http://www.blogger.com/profile/14984083230995512459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/-Zo7dhr1qbOI/TfXhB0EMIKI/AAAAAAAAAAw/3SFqn-eYCZc/s220/ram.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3814652895914324464.post-4098125460207819759</id><published>2009-11-20T10:34:00.000-08:00</published><updated>2009-11-20T10:39:38.284-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ajax development'/><title type='text'>Ajax Website in  Asp.net development</title><content type='html'>ASP.NET AJAX is the free Microsoft AJAX framework for building highly interactive and responsive web applications that work across all popular browsers. The ASP.NET AJAX framework includes Server-Side ASP.NET AJAX, Client-Side ASP.NET AJAX, the AJAX Control Toolkit, and the jQuery library. ASP.NET AJAX enables developers to choose their preferred method of AJAX development, whether it is server-side programming, client-side programming, or a combination of both.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Easy development chat application is Ajax&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/nT3mxunh3kE&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/nT3mxunh3kE&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;easy to learn Ajax development in .Net&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zHMmJLQG__g&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/zHMmJLQG__g&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Please feel free to contact:  &lt;span style="font-weight:bold;"&gt;me.rambhopal@gmail.com&lt;/span&gt;&lt;br /&gt;for Ajax webapplication development&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3814652895914324464-4098125460207819759?l=hireinindia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hireinindia.blogspot.com/feeds/4098125460207819759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3814652895914324464&amp;postID=4098125460207819759' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3814652895914324464/posts/default/4098125460207819759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3814652895914324464/posts/default/4098125460207819759'/><link rel='alternate' type='text/html' href='http://hireinindia.blogspot.com/2009/11/ajax-website-in-aspnet-development.html' title='Ajax Website in  Asp.net development'/><author><name>Rambhupal</name><uri>http://www.blogger.com/profile/14984083230995512459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/-Zo7dhr1qbOI/TfXhB0EMIKI/AAAAAAAAAAw/3SFqn-eYCZc/s220/ram.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3814652895914324464.post-748709509316741762</id><published>2009-11-20T10:18:00.000-08:00</published><updated>2009-11-20T10:28:00.454-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Development'/><title type='text'>Web Development in Asp.net and Web Development in PHP</title><content type='html'>Custom software development company, India offers offshore software development, Web development, custom ASP NET development, ASP.NET C# development, custom PHP development, custom application development services... &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Web Development in Asp.net&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/JGsv2YIaxOk&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/JGsv2YIaxOk&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Web Development in PHP&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/IUi27VW2rZA&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/IUi27VW2rZA&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Please feel free to contact &lt;span style="font-weight:bold;"&gt;me.rambhopal@gmail.com&lt;br /&gt;&lt;/span&gt; for web development applications&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3814652895914324464-748709509316741762?l=hireinindia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hireinindia.blogspot.com/feeds/748709509316741762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3814652895914324464&amp;postID=748709509316741762' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3814652895914324464/posts/default/748709509316741762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3814652895914324464/posts/default/748709509316741762'/><link rel='alternate' type='text/html' href='http://hireinindia.blogspot.com/2009/11/web-development-in-aspnet-and-web.html' title='Web Development in Asp.net and Web Development in PHP'/><author><name>Rambhupal</name><uri>http://www.blogger.com/profile/14984083230995512459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/-Zo7dhr1qbOI/TfXhB0EMIKI/AAAAAAAAAAw/3SFqn-eYCZc/s220/ram.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3814652895914324464.post-4961965411885978218</id><published>2009-11-20T09:52:00.000-08:00</published><updated>2009-11-20T10:14:47.205-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP Classic v/s ASP.NET'/><title type='text'>Classic ASP to ASP.NET Migration</title><content type='html'>We make sure that our team of ASP Developers is updated with all these technologies and standards. If the requirement suggests that we use a specific standard, we make sure the standards specified in the requirements are looked upon else we go ahead and use the latest versions and standards. ASP development is an art that can only be accomplished by a few&lt;br /&gt;Please feel free to contact &lt;span style="font-weight: bold;"&gt;me.rambhopal@gmail.com&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Classic ASP to ASP.NET Migration&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/rkSh5-cYT8s&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/rkSh5-cYT8s&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/rCIjy4PYgy0&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/rCIjy4PYgy0&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Its been years that we are monitoring the increasing popularity of .NET Application Services. This has resulted in the further development of the advanced features in website designing by the .NET developers. With this advancement in ASP.NET Web development , it has become more easier to develop the very user-friendly websites that are very impressive too.&lt;br /&gt;&lt;br /&gt;The advancement of ASP.NET has outshone the ASP Classic application due to its advanced technology-based features. The ASP.NET developers find it more better in usage &amp; development than the ASP Classic web development application in many different ways, which can be seen as below:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Stability&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;•In the ASP Classic mode there are more application crashes very easily as it runs under the inetinfo.exe process. This leads to many problems in the programming &amp; consumes lot of time &amp; resources.&lt;br /&gt;&lt;br /&gt;•ASP.NET is absolutely crash-proof incase of any application failure. With this, the programming becomes much more advanced and easier as it is less time consuming.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Language Support&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;•Java script &amp; VB are the only languages used in the ASP Classic Version.&lt;br /&gt;&lt;br /&gt;•ASP.NET allows use of full server side programming languages &amp; not just the scripting ones. The other languages that can be used are like C#, VB.NET, that allow the development of robust &amp; very interactive web applications.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Compilation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;•As Classic ASP is comprised of VB Script &amp; Java Script interpreted at run-time, the compilation is carried out line by line. This results in some or the other inefficiencies at any point of time.&lt;br /&gt;&lt;br /&gt;•ASP.NET allows to compile the code the very first time it is accessed. This compiled code then results in ASP.NET classes which allow the servicing of the subsequent page requests with the previously compiled codes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Scalability&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;•ASP Classic version makes it difficult to update, maintain &amp; replace the components used by the web pages, which means that the complete process of updates &amp; upgrades becomes very lengthy.&lt;br /&gt;&lt;br /&gt;•With ASP.NET the complete process of updating the components within a time-frame without even restarting the web server. This helps in achieving more stable applications comparing to the classic version.&lt;br /&gt;&lt;br /&gt;With all these differences in the modules &amp; structures, ASP.NET has been proved to be much more better and user-friendly than the ASP Classic Version in many ways. It has actually proved to be a boon for the ASP.NET application developers because of its exclusive features and has made the web development more efficient &amp; effective in blooming the field of Business Development.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3814652895914324464-4961965411885978218?l=hireinindia.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hireinindia.blogspot.com/feeds/4961965411885978218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3814652895914324464&amp;postID=4961965411885978218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3814652895914324464/posts/default/4961965411885978218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3814652895914324464/posts/default/4961965411885978218'/><link rel='alternate' type='text/html' href='http://hireinindia.blogspot.com/2009/11/classic-asp-to-aspnet-migration.html' title='Classic ASP to ASP.NET Migration'/><author><name>Rambhupal</name><uri>http://www.blogger.com/profile/14984083230995512459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/-Zo7dhr1qbOI/TfXhB0EMIKI/AAAAAAAAAAw/3SFqn-eYCZc/s220/ram.jpg'/></author><thr:total>0</thr:total></entry></feed>
