Callout v/s Plug-in in CRM 4.0-Collection of common programming errors
Taken from CRM 4.0 SDK help file:
Microsoft Dynamics CRM 4.0 maintains backward compatibility with callouts developed for Microsoft Dynamics CRM 3.0. At run time, the Event Execution Pipeline first executes any plug-ins that are registered in a given pipeline stage before executing any Microsoft Dynamics CRM 3.0 callouts registered in that same stage.
The callout method return values of PreCalloutReturnValue.Continue, PreCalloutReturnValue.Abort, and PreCalloutReturnValue.Stop are supported. However, a Stop is now equivalent to an Abort except that a standard error message is displayed to the user instead of a custom message. Also, returning a Stop or Abort from a callout has no effect on the execution of any registered plug-ins since all plug-ins are executed before any registered callouts are executed.
The onerror attribute of the subscription tag in the callout configuration file (callout.config.xml) is not supported by Microsoft Dynamics CRM 4.0. If a callout throws an exception or allows an exception to be passed back to the platform, the exception message is displayed in a dialog of the Web application even if onerror=”ignore” is specified in the callout configuration file.
For more information, see the Microsoft.Crm.Callout.PreCalloutReturnValue topic in the Microsoft Dynamics CRM 3.0 SDK.
A limitation of using Microsoft Dynamics CRM 3.0 callouts is that the callouts are not able to take advantage of any new Microsoft Dynamics CRM 4.0 capabilities such as asynchronous execution, database deployment, rich plug-in context, and infinite loop detection.
For more information on how to develop and register Microsoft Dynamics CRM 3.0 callouts, see the Microsoft Dynamics CRM 3.0 SDK.