Friday, January 9, 2009

Cannot change Business Unit.

Wow, that was rough! I have a client that had a very weird error. Every time you tried to change someone’s business unit you received the all-so-helpful error page that told you nothing. Looking into the event logs held no errors and the trace logs were difficult to ponder as well. That led to a call to MS for help. In the end it appeared to be a timeout issue while it was trying to change the business units.

Within the logs they found the following error:

Crm Exception: Message: , ErrorCode: -2147204784, InnerException: System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.




If you read the article http://support.microsoft.com/kb/918609 it appears to be around customizations and uploading them, but it worked in this instance as well.



To resolve this problem, use one of the following methods.



Method 1: Add the OLEDBTimeout and the ExtendedTimeout registry subkeys to increase the time-out values



Warning Serious problems might occur if you modify the registry incorrectly by using Registry Editor or by using another method. These problems might require that you reinstall your operating system. Microsoft cannot guarantee that these problems can be solved. Modify the registry at your own risk.




  1. Click Start, click Run, type regedit, and then click OK.


  2. Locate the following registry subkey:



    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM



  3. Right-click MSCRM, point to New, and then click DWORD Value to create a new DWORD value.


  4. Rename the DWORD value to the following value:



    • OLEDBTimeout



  5. Right-click the DWORD value, and then click Modify.


  6. In the Edit DWORD Value dialog box, type 86400 in the Value data box, click Decimal in the Base option, and then click OK.


    Note According to the requirement of the computer that is running SQL server and the number of customization files, the value can be larger than 86400. The value of 86400 is equivalent to 24 hours.


  7. Right-click MSCRM, point to New, and then click DWORD Value to create a new DWORD value.


  8. Rename the DWORD value to the following value:



    • ExtendedTimeout



  9. Right-click the DWORD value, and then click Modify.


  10. In the Edit DWORD Value dialog box, type 1000000 in the Value data box, and then click OK.


    Notes





    • In the Value data box, you can type a value that is larger than 1,000,000. However, do not type a value that is larger than 2,147,483,647. This is hexadecimal 0x7FFFFFFF.


    • If this key already exists, notice the current value. After you have completed the import or the upgrade for Microsoft Dynamics CRM, set the value of this key back to the original value or delete the key if it did not previously exist. The default OLEDB timeout value is 30 seconds.




Method 2: Modify a parameter in two different Web.config files




  1. Click Start, click All Programs, click Administrative Tools, and then click Internet Information Services (IIS) Manager.


  2. Expand the server name, and then expand Web Sites.


  3. Right-click the Microsoft CRM v3.0 Web site or the Microsoft CRM v4.0 Web site, and then click Open.


  4. Right-click the Web.config file, click Open With, and then click Notepad.


  5. In Notepad, locate the following line.



    • <httpRuntime executionTimeout="300" maxRequestLength="8192"/>



  6. Increase the "8192" value to a value that is large enough to handle the Customization.xml file.


  7. Save and then close the Web.config file.


  8. In the directory in which you opened the Web.config file, open the MSCRMServices folder.


  9. Right-click the Web.config file, click Open With, and then click Notepad.


  10. In Notepad, locate the following line.



    • <httpRuntime maxRequestLength="8192"/>



  11. Change the "8192" value to the value that you specified in step 6.


  12. Save and then close the Web.config file.



The OLEDBTimeout value



The unit of the OLEDBTimeout value is seconds. By default, the OLEDBTimeout value is 30 seconds. The OLEDBTimeout value controls the SQL time-out value that is used for a single SQL query. The increased OLEDBTimeout value is useful when the SQL server is overloaded. Additionally, the query takes a longer time to process.



The ExtendedTimeout value



The unit of the ExtendedTimeout value is milliseconds. By default, the ExtendedTimeout value is 1000000 milliseconds. The ExtendedTimeout value controls the ASP.NET time-out value that is used for import requests. The time-out value must be larger than the time for finishing the whole import process. The increased ExtendedTimeout value is useful when the import process takes a long time.

No comments: