Infosys Microsoft Alliance and Solutions blog

« May 2009 | Main | July 2009 »

June 26, 2009

Enterprise BI Dashboards: Silverlight vs. SAP Xcelsius

Recently, I have been in multiple client interactions related to BI Dashboards and the best technology/ tools for achieving superior user experience on BI dashboards.  One question that I faced on more than one occasion was ‘how does Silverlight compares with Xcelsius for doing corporate performance dashboards ‘?

This is a tricky question because in reality we are comparing apples to oranges here. Silverlight is a powerful but open ended platform, whereas Xcelsius is well tailored BI dashboarding toolkit with a specific user group as the target market. So there are inherent strengths and weaknesses.

But for any BI development team looking at picking a broad direction, I would like to share some factors to consider:

1.       Upfront Investment

 Silverlight is a free Web plug-in technology. For developers, the Software development kit for the basic development platform is free. For corporations, there are no licensing costs and plug-in install is not an issue beyond first usage.

 But if you decide to purchase Third party Silverlight controls like Infragisitcs or Telerik to reduce custom development and match the quality of UX; your upfront costs may not be significantly different.

2.       Downstream Costs

 Once acquired, both Silverlight and Xcelsius do not have any royalty type accruing costs.

Most of the costs related to owning and developing using these technologies is related to skill base needed for building the front end. 

Silverlight being a pure technical platform requires a strong developer with good design and programming skills to develop the front end, in addition to a business analyst to figure out what, where and how to display the business intelligence data. 

Xcelsius is a simple, drag and drop based software and so is very easy (and so popular) tool amongst Business analysts. From pure front end development costs point of view, it is possible to save the entire software developer related costs. The Xcelsius tool is simple and intuitive. Business analysts have been able to build compelling interfaces without any developer involvement.

Bottom-line, Xcelsius install and adoption are less technically challenging compared to adoption Silverlight platform or Silverlight based BI control kits.

3.       Ability to build impressive,  Rich Interactive Solutions

Silverlight is a very strong platform when it comes to building appealing and engaging Rich Interactive Applications.  It is extremely flexible and allows use of Themes and Custom styles to implement very good branding consistency across all UI elements.

As more and more custom controls become available, delivering high quality user interfaces with Silverlight will become easier and less time consuming.

With Xcelsius, the work needed to develop custom UI controls is already done, and that to on a far more stable platform – Flash. But since some design decisions have already been made, it restricts the overall flexibility you have going forward. It is possible to further customize or extend the Xcelsius tool kit using the Xcelsius SDK but Flex skill set is harder to find than .NET skill set.

If customization or extension of Xcelsius in not an option, then the dashboard designer has to live within the limitations of the available set of Xcelsius UI controls. Bottom-line, Xcelsius is impressive and adequate but has limitations if extension is not an option. Silverlight is very flexible and extensible but needs more time and custom development.

4.       Breadth and Range of Dashboard based Visualizations. Time duration for Project

Xcelsius comes with an easy drag-and drop type designer that allows rapid UI front development capability within very short time. Also, since a trained Business Analyst can build the UI, the efforts and time needed to communicate and collaborate with User Interface developer is not needed.

With Silverlight, certain due diligence around application architecture, UI customization and themes development requires investment of time.  It is easy to use these across projects, but if requirements are unclear /evolving; changes are more time consuming with Silverlight.

5.         Dashboard Dissemination Approach

 Silverlight is a Web based plug-in technology. Although it is platform independent, Silverlight based dashboards need to be disseminated through web browser.  This usually means additional investment in Portal or intranet application with adequate role based security.   Xcelsius gives more dissemination flexibility; flash files can be hosted on web, but can also be distributed through Word / PDF documents and can also be passed around through PowerPoint presentations.

To sum it up, for short duration, quick data visualization requirements where reaching out and working with IT is not an option, Xcelsius is a better option. For longer term investments with IT involvement and enterprise level scalability needs, Silverlight is a better option.

June 25, 2009

SOA – Built to Change!!!

Clients who have embarked on SOA initiative using Microsoft technology stack by year 2006 would have realized their business services using ASMX web services.  Since then, Microsoft web services technology has evolved rapidly to new framework of building services called as WCF (Windows Communication Foundation). WCF has been available since .Net 3.0 and above. WCF has been primarily designed to implement SOA principles.
For SOA implementation built using ASMX services, it may be good idea to look at the current Microsoft technology services stack and build a case for migrating from ASMX to WCF services.
Here is an attempt to list some of the technology drivers that can help build the Services migration business case in an Enterprise.

Reach ability

SOA initiatives using ASMX services and trying to reach out to all the stakeholders on internet using SOAP/http clients was the natural option, where as to connect with employees, internal users or partner’s it would have used TCP IP based .Net Remoting. Thus to serve different user base, one has to use different transport option and each transport needed independent implementation.

Unlike ASMX services which were primarily Http based, WCF Services can be reached using multiple protocols like Http, TCP IP, Named Pipe and MSMQ. Other clients like internet/intranet or partners can use any of the above mentioned preferred channels to hook on to these services without IT having to maintain separate code base to serve different client class.

Interoperability

Large Enterprises having mix of technologies, Interoperability requirements with Non Microsoft clients is one of the common scenarios in any SOA initiatives. With ASMX WS-*, XML Serialization is not standardized and hence it is difficult to achieve true interoperability. With WCF, it generates standard SOAP based XML to be consumed by clients. Additionally by using data contracts and message contracts, information exchange with non Microsoft clients’ become easy and improves interoperability.

Performance

Most often sharpness of underlying technology contributes in meeting performance based business SLAs (e.g. In banking gateway for Money transfer, Number of clients served per second). ASMX services were part of .net framework 2.0, since then with .net 3.5 and 4.0 around, there has been continuous improvements in core .net framework to improve performance.

One of the key reasons WCF performance is better than ASMX services is due to the improved serialization techniques in the .net framework. WCF services provide 25 to 40% improvement in performance over ASMX services and hence become natural preference for high performance application.

Extensibility

If ASMX services were to be delivered to clients, only possible way to host them was on to IIS (Internet Information Server). With WCF services, one can host the services into Windows services, Windows Activation Service (WAS) or IIS. WCF also supports claims based authorization which is more granular than existing mechanisms. With WCF starting from application runtime, security, binding, serialization, channel system to service host everything is extensible.

ASMX with WSE 3.0 supports security and http buffering/caching/sessions but still lacks support for Session management, Concurrency, Security, Reliable messaging, Transaction, Throttling, Exception handling and faults. In applications explicitly using WSE to support some of these features is difficult and cumbersome, where as with WCF WSE is inbuilt.

With .Net 4.0, the argument to migrate becomes even stronger because of the benefit from platform features like CLR enhancements, Improved Garbage collection, Parallel programming, Distributed caching, and improved support for REST, and Workflow Services.

With above benefits making way to WCF migration, one of the ways to solve service migration problem is by overlaying WCF attribute over ASMX attributes. e.g. With ServiceContract() attribute on ASMX Service class, and OperationContract() on service methods/operations and then making  appropriate changes in .config file. This wrapper based approach may make asmx services work with asmx and wcf clients. But with this approach, since the underlying code is still asmx, it will not benefit from the underlying framework advantages that WCF provides as discussed above.

Within Infosys, we have built tool to automate and address such service migrations from ASMX to WCF. If you are looking for help on such initiatives, please feel free to reach out to us.

June 16, 2009

Troubleshooting WCF Service application hangs

If you come across scenarios where WCF ASP.net client is getting hanged after some activity on the server, one of the possible reasons could be due to WCF connection pool exhaustion. This blogs takes a stab at approach and some guidelines in identifying and resolving such application hangs.

Troubleshooting

While troubleshooting such problems one should start with following
1. The service application hosted on IIS should be using dedicated application pool (no other application is using the same application pool)

2. In case if the client application (asp.net) is also hosted on the same IIS server it should be using another dedicated application pool

Once these basic things are ensured, one should configure perfmon on IIS server with Instances counter from ServiceModelService 3.0.0.0. The instances count can help plot the service instances consumed from the application at any given point of time.

Another way to validate this is by taking memory dumps using DebugDiag, downloadable here.

Take full memory dump on server running WCF services (for IIS 6 and above, w3wp process id running WCF, or aspnet_wp for IIS 5). The Debugdiag tool needs to be installed on machine running IIS and the appropriate application Crash/Hang rule should be configured in this tool to capture the dump. Once the memory dump is captured on server, one can analyze this dump using WinDbg client, this tool can be downloaded from here

Once dump is obtained, next step is to start analyzing dumps. Steps to analyze the memory dumps are as follows

1) Open Crash Dump in WindDebug from File-> Open Crash dump

2) Set symbol path using command !symfix D:\Symbols

3) Load SOS file for .net 2.0 CLR using
   .Load C:\Windows\Microsoft.NET\Framework\v2.0.50727\SOS.dll

4)   To list addresses of all objects of type ServiceThrottle that exist on the managed heap. Use !dumpheap -type ServiceThrottle –short

------------------------------
0:000> !dumpheap -type ServiceThrottle -short
09f20b10
09f22a14
09f24a56
09f25023
0deaa456

5)For each address from the above output, list dumpobject address using command
!do 0deaa456

0:000> !do 0deaa456
Name: System.ServiceModel.Dispatcher.ServiceThrottle
MethodTable: 1b1ba2e4
EEClass: 1ae21f20
Size: 36(0x24) bytes
 (C:\WINNT\assembly\GAC_MSIL\System.ServiceModel\3.0.0.0__b77a5c561934e089\System.ServiceModel.dll)
Fields:
      MT      Field         Offset                 Type VT     Attr      Value         Name
1b1ba328  400371c        4 ...cher.FlowThrottle  0   instance 0deaa454   calls
1b1ba328  400371d        8 ...cher.FlowThrottle  0  instance 0dea45b    sessions
1b175dbc  400371e        c ...her.QuotaThrottle  0  instance 00000000  dynamic
1b1ba328  400371f       10 ...cher.FlowThrottle  0  instance 00000000 instanceContexts
1b1b994c  4003720       14 ...l.ServiceHostBase 0  instance 0deaa168 host
793043b8  4003721       1c       System.Boolean 1 instance 0deaa234 isActive
79330508  4003722       18        System.Object  0 instance 0deaa3b8 thisLock

6) The ServiceThrottle object has many fields but sessions will help us progress. Type !do address of the sessions field to see what's inside of it.
!do 0dea45b
 
0:000> !do 0dea45b
Name: System.ServiceModel.Dispatcher.FlowThrottle
MethodTable: 1b1ba322
EEClass: 1ae21c43
Size: 36(0x24) bytes
 (C:\WINNT\assembly\GAC_MSIL\System.ServiceModel\3.0.0.0__b77a5c561934e089\System.ServiceModel.dll)
Fields:
      MT      Field       Offset                 Type VT     Attr        Value       Name
79332b38  50034f4       18         System.Int32  1 instance       10             capacity
79332b38  50034f5       1c         System.Int32  1 instance       10              count

79330508  50034f6        4        System.Object  0 instance 0deaa570 mutex
7931e84c  50034f7        8 ...ding.WaitCallback  0 instance 0deaa52c release
00000000  50034f8        c                               0 instance 0deaa57c waiters
793308ec  50034f9       10        System.String  0 instance 0deaa4b4 propertyName
793308ec  50034fa       14        System.String  0 instance 0deaa4f0  configName
 
The above highlighted capacity shows what the maximum capacity of WCF pool is; count indicates the current number of instances. In this example since both are 10, it indicates that no new WCF connection can be created unless the existing ones are being released.

Remedies

Unlike ASMX services, the WCF services needs to be explicitly instantiated and once the service call is completed the proxy connection needs to be explicitly closed. Not doing so correctly can result in to server side WCF connection exhaustion ultimately leading to service denial.
There may be scenarios where the concurrent users may be 2 or 3 and still the WCF connection pool may get exhausted, this can happen due to one of the possible condition

1.While working with the application, the concurrent browser sessions would have reached to 10 and hence connection pool got exhausted and couldn’t serve beyond 10 concurrent requests

2.WCF Service in turn calling Database stored procedures or other code which is long running and hasn’t returned the call to service, connection timeout settings are not hit and hence pool got exhausted.

3.WCF connections being leaked from some part of the code as WCF proxies were not closed appropriately.

For #2, the service side .config parameters which control settings are mentioned in serviceThrottling section depicted as
 
<serviceBehaviors>
        <behavior   name="My.Samples.ServiceLayer.CricketScoreServiceBehavior">
          <serviceThrottling
                 maxConcurrentCalls="10"  
                 maxConcurrentSessions="10” />
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
 </serviceBehaviors>

maxConcurrentCalls specifies maximum number of messages actively processing over a servicehost, where as maxConcurrentSessions controls how many maximum concurrent sessions can exists on the service host.  Refer the details about these settings here
Setting these to 10 may not be enough in scenarios where total No. of users or concurrent users are high.
For the above service, as soon as the total service instance reaches to 10, the next client call to service would go in wait state. It would remain in wait state and wait till the existing WCF connections are closed or timed out. Hence it is important that the timeout setting kicks in ASAP so that the client can acquire connection. These settings are controlled using the client side .config parameters which are ReceiveTimeout and InactivityTimeout

•InactivityTimeout - This inactivity timer fires if no messages, either application or infrastructure, are received within the timeout period. An infrastructure message is a message that is generated for the purpose of one of the protocols in the channel stack, such as a keep alive or an acknowledgment, rather than containing application data.

ReceiveTimeout - This inactivity timer fires if no application messages are received within the timeout period. This specifies, for example, the maximum time a client may take to send at least one message to the server before the server will close the channel used by a session. This behavior ensures that clients cannot hold on to server resources for arbitrary long periods.

<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ICricketScoreService"
          closeTimeout="00:01:00"
          openTimeout="00:01:00"
          receiveTimeout="00:10:00"
          sendTimeout="00:01:00"
            <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
        </binding>
      </wsHttpBinding>
    </bindings>
</system.serviceModel>
 
 
Details about other WCF settings can be referred from here
Timeout settings are handy, but for #3 above, important that in the client side code one must ensure that the WCF proxy connections be explicitly closed. Following code snippet can be used as guidance for appropriate connection closing.

Try
  {
      CricketScoreService.ScoreClient _obj;
     _obj = new CricketScoreService.ScoreClient();
      //do other activities like calling Business layer method and once
      //done close the WCF connection as below
     _obj.Close();
  }
              Catch (Exception e) //catch service exception like faulted, etc.
      {
         if (obj!= null) &&
            (_obj.State == System.ServiceModel.CommunicationState.Faulted)
          {
           _obj.Abort();
          }
         Else if (obj!= null) &&
                 (_obj.State != System.ServiceModel.CommunicationState.Closed)
                {
                    _obj.Close();
                }
      }
   
 
Another recommended way to close WCF connection is by “using” statement as follows,
using (CricketScoreService.ScoreClient sc = new CricketScoreService.ScoreClient ())
       {
         sc.getScores(“111”);
       }

The using block automatically calls sc.Dispose() when it's done.
using statement doesn’t always ensure closed connection, hence it is not recommended to be used for closing connections. 
With ClientBase abstract class(which any WCFClient would inherit, check here), implementing the Dispose() method will make a call to Close(). When the ClientBase's Close() method is called, a web service call actually goes out to the WCF service, informing it that the connection session is no longer required. The problem with this mechanism is that when the Close() method is called, an exception can be thrown. After all, it involves yet another network call to a web service. It's for this reason that the using statement isn't recommended with WCF clients.

With this as background, watch out for WCF application hang problem for applications running in UAT, or production scenarios and this should come handy resolving it.

June 15, 2009

Visual Studio 2010 Beta 1 install experience

The other day I finally got to install VS 2010 Beta 1. I had decided to build a VPC for the same so as to not impact my current workstation setup. Overall the experience was pretty smooth and the setup ended without any issues, but the initial few components did cause a bit of pain.

After every component (VC 9 Runtime, VC 10 Runtime, .NET 3.5 SP1 and .NET framework 4 Beta 1), i.e. 4 of these, I had to restart the machine and it was really painful. Beyond that it completed without any more restarts.

June 12, 2009

Understanding an ERP implementation – Bridge Analogy

This is a simplistic approach of relating an ERP implementation to constructing a bridge (under Build, Operate and Transfer basis by a private contractor) due to the inherent nature of activities being the same in both the scenarios.

The making of a bridge entails site inspection to ground preparation to blueprinting ending with construction where there are tests in the intervening duration to ensure that this is safe and can serve the intended purpose without risking the lives of the users who are going to use this to go from Point A to Point B. The work is not limited to only bridge but also entails making approach roads and giving a complete end to end solution to the commuter needs.

The ERP implementation is no different! Let’s see how…

S. No.

Stage in Bridge Construction

Stage in ERP Implementation

Important Consideration

1
Ground Preparation
Project Planning

 

This is the planning phase in which the entire work plan is made, teams are organized, responsibilities given and basic discussions/groundwork is started to assess the details needed for design
The initial discussions around the scope of work, team structure, execution details and discussions, formation of teams by partner and client, objectives and outcomes expected
·Business user buy-in at client end,
·Organization readiness for change,
·Communication of objectives and expected benefits,
·Be as open as possible with partner to  help him understand the details
2
Defining Dependencies
Project Initiation 

 

Regulations, blasting controls & approvals, contractor negotiations for outsourced work, deciding on methodology of execution, identifying external dependencies
Understand the client business needs, pain points, success criteria, regulatory environment, need for 3rd parties involvement, project execution methodology (waterfall, agile, etc.), external dependencies (product vendors, add-ons ISVs, other solutions)
·Business needs and pain points must be clearly articulated and documented
·Project execution methodology once frozen need to be religiously followed
·Risks around the external dependencies need to be documented and understood by client and partner
3
Site Inspection
Scoping & Requirement Gathering

 

To see that the real scenario of the bridge site and assess the potential situations. This helps in defining accurate scope of work and arriving  a ‘good’ budgetary number
It is very important to define the scope of the ERP implementation along with the details of what all would be covered in the execution plan. This will help in arriving at a ‘good’ budgetary number which can help in budgeting for the entire project.
·Any increase in scope of work can impact project cost
·Scope delimitation and finalization is a very important part of the overall project execution
·This helps the partner to plan the execution more effectively
4
Blueprinting
Design

 

This is the phase in which the design starts and the load, span along with other design parameters are decided. This also includes incorporating affect of external (environmental) load factors like Wind, Seismic forces, flooding, etc.

 

The broad architecture, technical design and entity definition happens in this stage. There is a focus on the both functional and non-functional items along with focus on load factors like Concurrent users, time zones, transaction loads, peak load analysis, bandwidth availability, hardware needs, network detailing and interface loads
·The loads around users, transactions, network, hardware and instance strategy should be properly sized
·The need for interfaces, reports, legal formats, statutory needs, data migration elements need to be planned for development to proceed smoothly
5
Construction
Development

 

Once the design is completed with finalized parameter, we would move into actual construction. This would not be limited to construction of bridge but would also involve –
·   Strengthening the foundation where the bridge would rest
·   Making the correct road alignment for the approach roads both at approach and exit from bridge
This involves setting up the coding standards and best practices for the development Lifecycle (Strengthening the foundation), code development for the business needs (making the bridge), Building the interfaces (approach roads) and configuring the reports
·The code development should commence once the design has been finalized so that there are no reworks – which leads to delays, errors and integration issues later
·The interface details need  to be very clearly captured along with their fit into the overall design and business process
6
Testing
SIT & UAT

 

Each component of the bridge like girders, foundations, angles, connectors, rivets are tested individually and finally the entire bridge is loaded and tested as well
Each code component has to be unit tested. The final code has to undergo multiple rounds of system integration testing to see that they work together and finally the users have to conduct the User Acceptance Testing for the customizations developed.
·SIT should happen after the interfaces are built to ensure they work in a test environment
·The User test cases must be prepared by client team well in advance to ensure complete coverage of test scenario
7
Communication & Inauguration
Cutover & Go-Live

 

With the project being completed as per the defined parameters, this is the time to make it available for public to use. The general public need to be aware of the new route and need to be given ample driving directions on the approach roads as well
 
There needs to be proper user training, handholding and activities around getting the business ready for the correct usage of the application for their own benefit. The data migration and final cutover of balances to the production environment will happen here
·Cutover planning is very important and should cover timing of communication and content
·Opening balances need to be carried to new environment
·The change management aspects for the organization will yield benefit in this stage
8
Bridge Maintenance
Steady State Support

 

The bridge has to be maintained on an ongoing basis with regular maintenance along with any urgent maintenance as well which can sometime even entail stopping the flow of traffic on the bridge
Supporting the application for bug-fixes, software patch application, major and minor enhancements, database administration, user administration, application maintenance, access management, disaster recovery mechanism
·The support team should have all documentation from the project implementation
·The release of bug-fixes and enhancements should follow the complete lifecycle of development to testing before being deployed on production
·Disaster recovery mechanism should never be overlooked

June 11, 2009

WPF - Performing Conditional Validation

When we look at conditional validation needs in WPF, the typical option that people talk about is the usage of UpdateSourceTrigger property in binding expression. There are many examples that one can find on setting this to explicit and managing the validation or things like setting this to PropertyChange when validating textbox input without having to focus out of it.

However there can be scenarios where you can't use explicit since you want the normal two way binding behavior, but have a need to validate based on value of some other control. I had a similar scenario the other day where we had a combo box with yes/no options and the validation had to happen only if a value of "yes" was selected in the combo box.

The idea that I tried out was to do a trigger based binding on the textbox and enable the validation accordingly. One can easily look at setting some globaly property or pass a parameter to the validation rule and in the implementation check for the condition. But this woud mean that the validation rule still fired. I wanted to do away with this extra firing when not required.

So in the textbox, I bound it's Tag property to the combo box's Text property as below.

        <TextBox Style="{StaticResource validationStyle}" Name="textBox2" Tag="{Binding ElementName=comboBox1, Path=Text}" />

And then in the style that I had created for the textbox, I created a trigger, which would fire when the textbox's Tag property has a value of "yes". In this trigger, I applied the binding with the validation, else it was a nomal binding (without the validation). The style was defined as below

        <Style x:Key="validationStyle" TargetType="{x:Type TextBox}">

            <Setter Property="Text">

                <Setter.Value>

                    <Binding Path="Salary" Source="{StaticResource getEmployee}" />

                </Setter.Value>

            </Setter>

            <Style.Triggers>

                <Trigger Property="Tag" Value="Yes">

                    <Setter Property="Text">

                        <Setter.Value>

                            <Binding Path="Salary" Source="{StaticResource getEmployee}" UpdateSourceTrigger="PropertyChanged" >

                                <Binding.ValidationRules>

                                    <local:RangeValidationRule MinSal="1000" MaxSal="10000" />

                                </Binding.ValidationRules>

                            </Binding>

                        </Setter.Value>

                    </Setter>

                </Trigger>

            </Style.Triggers>

        </Style>

This got me the behavior I was looking for. The UpdateSourceTrigger was used to overcome the default value of lost focus for textbox, so that validation could fire as the user would be typing. There are two subtle issues though with this implementation

1. The binding expression is set again in the trigger. Ideally it should have been that i query the existing binding expression and add validation rule to it. However that would have meant that I will need to add the reverse trigger also to remove the validation rule.

2. After changing the value in the combo box to yes, the validation won't fire immediately. I had to type something in the textbox for it to work. I could handle the combo box selection changed event handler to address this.

You can welcome to try to add these behaviors and revert. Hope this helps !
 

 

 

June 04, 2009

Silverlight 2 and Web Accessibility

One question I have faced multiple times since the inception of Silverlight technology is how well does it support Web Accessibility requirements?  The support for accessibility was quite limited in Silverlight 1; but with Silverlight 2 there have been significant improvements.

The three part series, Creating Accessibility-aware Silverlight 2 Content, written by Mark Rideout is the best compilation features and examples on this topic. It walks the designers as well as developers through a series of things they can do to ensure that the RIA application they building is compliant with web accessibility requirements.

June 01, 2009

First startup experience after upgrading Outlook 2007 with SP2

Amartya commented on my previous Windows 7 blog post that network activity notification icon issue would be resolved by upgrading to Office 2007 SP2 (http://www.infosysblogs.com/microsoft/2009/05/windows_7_system_tray.html#comment-123052). Over the weekend I upgraded my system with Office 2007 SP2. As i suspected still my network notification icon mismatch problem persists Frown 

Today I find that Outlook is taking too much time to start up. I got a dialog that system is Preparing Outllook for first use. After 10 mins when I looked at the dialog I found the following ( 45 mins remaning). Check the below picture.  

 Outlook.PNG

Upon further investigation found that there is a KB article at http://support.microsoft.com/kb/968774. Check the section "First Startup experience".  As mentioned in the article delays are because  "Outlook must update internal PST data structures that are used in SP2 performance optimizations"

Though the above dialog shows that 45 mins remaining. Overall it took about 30 mins to start Outlook on my machine. So please check the KB article on the steps to mitigate this delay. Don't fret and fume if you are in hurry to check mails after upgrading to SP2. I am yet to check up the performance optimizations that have been promised in SP2.

Subscribe to this blog's feed

Infosys on Twitter