Welcome to MSDN Blogs Sign in | Join | Help

Ajit Yadav blog

MSDTC, COM+ and all that jazz..
COM+ : 8000FFFF - Catastrophic Failure

On a windows 2003 server, when we open Component services MMC --> complus Applications, we get the following error :

 

Catalog error:  An error occured while processing the last operations

error code 8000FFFF - Catastrophic Failure

the event log may contain additional troubleshoooting information

 

The system was very sluggish and slow in responding.

 

we were not able to rebuild the COM+ catalog from Add/Remove windows components setup. It failed with the error :

 

Com+ setup error

Sub compoment com+ raised an exceptipn while processing the

OC_COMPLETE_INSTALLATION setup message

d:\nt\com\complus\src\complussetup\compluscore.cpp

(line 563) error code = 0x80040206

an unexpected internal error was deteted

the complus event classes could not be registered

 

Application Log :

 

EVENT SYSTEM

EVENT id 4610

THE COM+ EVENT SERVICE detected a bad return code during its internal processing

HResult was 80040154

from line 44 of d:\nt\com\complus\src\evnets\tier1\eventsystemobj.cpp

 

 

Provided full permissions to Authenticated users on the

“HKeyClassesRoot [HKCR]\CLSID” registry key.

Note : Try giving read permissions to Authenticated Users first. It might work too.

After this the COM+ setup completed successfully.

0x8004D027 : MSDTC was unable to read its configuration information.

On a two node Windows 2003 SQL server cluster, while running the SP 2 setup for SQL server 2005, we were getting the following error :

Error Description : MSP Error: 29549 Failed to install and configure assemblies C:\Program Files (x86)\Microsoft SQL Server\90\NotificationServices\9.0.242\Bin\microsoft.sqlserver.notificationservices.dll in the COM+ catalog. Error: -2146233087

Error message: Unknown error 0x80131501

Error description: MSDTC was unable to read its configuration information. (Exception from HRESULT: 0x8004D027)

 

Troubleshooting Steps

==========================

On the active node of msdtc, in the Component services we found red down arrow besides My Computer node that indicates something is wrong with MSDTC. Tried to expand COM+ applications node and got the following error :

80070422 : The service cannot be started, either because it is disabled or because it has no enabled devices associated with it.

In the services.msc, we found that the COM+ system application service was disabled. Enabled it by setting it to manual. Fired up the Component services and the red down arrow went away.

We ran the setup but still got the error 0x8004D027.

 

Resolution

=======================

Took the DTC resource offline and deleted it.

Reinstalled the msdtc service from the command prompt.

msdtc -uninstall.

msdtc -install

msdtc -resetlog (it will set the DTC log path to quorum disk)

Went to the cluster admin and brought the dtc resource online.

Also took the SQL resource group offline and brought it online.

Ran the setup and it completed successfully.

All Visual Studio and .NET Framework hotfixes on MSDN Code Gallery are now localized in 10 new languages

All of the Visual Studio and .NET Framework hotfixes that are publicly available on MSDN Code Gallery are now localized in the following languages:  French, Spanish, Italian, German, Traditional and Simplified Chinese, Japanese, Korean, Russian, and Brazilian Portuguese. You can browse the list of Hotfixes on MSDN CodeGallery here:

 http://code.msdn.microsoft.com/Project/ProjectDirectory.aspx?TagName=Hotfix.

 

MSDN Code Gallery allows the community to provide feedback on the hotfixes and one can stay informed when a new hotfixes is released by subscribing to the following RSS feed:

 

 http://code.msdn.microsoft.com/rss.ashx?behavior=bytag&TagName=Hotfix.

Unable to enlist in a distributed transaction

You run distributed transactions between two machines and they fail with the error "Unable to enlist in a distributed transaction".

 

Troubleshooting Steps for Windows 2003 SP1 and SP2.

 

1.       First of all check if name resolution is working fine between the two servers. MSDTC uses NETBIOS name hence check for NETBIOS name resolution. You may use the command:  ping <servername>

2.       See if port 135 is open between the two machines. Run the command :

       telnet  <server name> 135

       This might be blocked in case there is a firewall between the two servers. 

3.       If name resolution is fine and port 135 is open, proceed with the following steps.

4.       Go to Start à Run à (type in) Dcomcnfg. You should be inside Component Services MMC.

5.       Expand Component Services à Computers à My Computer (right click) à Properties à MSDTC tab à Security Configuration button.

6.   Enable the following options :

      Network DTC Access

      Allow Inbound

      Allow Outbound

      No Authentication Required  (if the servers are in different domains with no mutual trust, or if the other server is Windows 2000)

      Enable XA transactions           (if you are using XA transactions)

 

 

For more information on these settings you may refer to the KB article : http://support.microsoft.com/default.aspx/kb/899191

 

7.       After selecting the checkboxes as given above, it will prompt you to restart MSDTC. Say “Yes” to it.

8.       If both the machines are Windows 2003 SP1 or SP2. We should have these settings on both the machines.

9.       If the other machine is Windows 2000 SP4 we don’ t need to do anything there as we don't have these security features there.

10.   If the problem persists, check if there is any firewall between the two machines.

11.   If yes, then we need to open a TCP port range on the firewall bi-directionally. Also the same port range has to be configured on both the machines. Apart from that port no. 135 should be opened on the firewall too.

12.   To specify the port range on the machine you may go to :

Start à Run à (type in) Dcomcnfg. You should be inside Component Services MMC.

Expand Component Services à Computers à My Computer (right click) à Properties àDefault Protocols.

Select the “Connection-oriented TCP/IP” à Click “Properties” button. Specify the port range that you have opened on the firewall

here. This should be done on both the machines.

(To specify the port range through Registry editor refer to http://support.microsoft.com/default.aspx/kb/250367)

13.   Restart the machine for the port range changes to take effect.

 

How to use Application Root directory option to configure application.config for a specific COM+ application
We would like to use the app.config file for a specific COM+ application. Generally we create dllhost.exe.config and put that in System32 directory. But this
app.config will then be applicable to all the COM+ server applications.


Resolution :

1. Create config and manifest file for COM+ application. Name them after the COM+ application name. for e.g. <COM+ app name>.manifest and <COM+ app name>.config


<COM+ application name>.manifest (no changes required, you can use the following manifest as it is) :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
</assembly>


<COM+ app name>.config (change the assembly identity and codebase section for the assembly) :

<?xml version ="1.0"?>
<configuration>
   <runtime>
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
          <assemblyIdentity name="<dll name>" culture="neutral" publicKeyToken="6de37167d58dd222"/>
          <codeBase version="1.0.0.0" href="FILE://C:\RePro\CommonLibrary.dll"/>
       </dependentAssembly>
     </assemblyBinding>
   </runtime>
</configuration>


2. Go to the COM+ application properties --> Activation tab and specify the path to the app.manifest and app.config file in the Application Root Directory.

1928: error registering com+ application on Vista

Problem:

Unable to install COM+ application proxy on Vista machine.

In the event log, 

Error 1928: error registering COM+ application.

Resolution:

Removed rundll32.exe from DEP (Data Execution Prevention) to resolve the problem.
Rundll32.exe is used while running the installation of COM+ application proxy.

For more information about Data Execution Prevention feature : http://msdn.microsoft.com/en-us/library/aa366553.aspx 




 

Override the System.Transactions default timeout of 10 minutes in the code

Problem :

We were using System.Transactions to initiate distributed transactions against SQL Server. The transaction were getting aborted after about 10 minutes even though the System.Transactions has a timeout set to 200 minutes.

DTC timeout (in the Component Services) is set to 0 (infinite) on both app server and sql server.

DTCTrace.log from app server :
===============================
pid=3680 ;tid=5376 ;time=03/07/2008-08:20:22.717 ;seq=6 ;eventid=TRANSACTION_BEGUN ;tx_guid=a49298cd-709a-4fbe-a637-2fc6c4ab029a ;"transaction got begun description : '<NULL>'"
pid=3680 ;tid=4404 ;time=03/07/2008-08:20:24.389 ;seq=7 ;eventid=TRANSACTION_PROPOGATED_TO_CHILD_NODE ;tx_guid=a49298cd-709a-4fbe-a637-2fc6c4ab029a ;"transaction propagated to '<SQL Server machine name>' as transaction child node #1"
pid=3680 ;tid=1596 ;time=03/07/2008-08:30:24.217 ;seq=8 ;eventid=RECEIVED_ABORT_REQUEST_FROM_BEGINNER ;tx_guid=a49298cd-709a-4fbe-a637-2fc6c4ab029a ;"received request to abort the transaction from beginner"

pid=3680 ;tid=1596 ;time=03/07/2008-08:30:24.217 ;seq=9 ;eventid=TRANSACTION_ABORTING ;tx_guid=a49298cd-709a-4fbe-a637-2fc6c4ab029a;"transaction is aborting"
pid=3680 ;tid=1596 ;time=03/07/2008-08:30:24.217 ;seq=10;eventid=CHILD_NODE_ISSUED_ABORT ;tx_guid=a49298cd-709a-4fbe-a637-2fc6c4ab029a ;"abort request issued to transaction child node #1 'ASSURITYFS001'"
pid=3680 ;tid=4404 ;time=03/07/2008-08:30:24.217 ;seq=11;eventid=CHILD_NODE_ACKNOWLEDGED_ABORT ;tx_guid=a49298cd-709a-4fbe-a637-2fc6c4ab029a ;"received acknowledgement of abort request from transaction child node #1 'ASSURITYFS001'"

pid=3680 ;tid=4404 ;time=03/07/2008-08:30:24.217 ;seq=12;eventid=TRANSACTION_ABORTED ;tx_guid=a49298cd-709a-4fbe-a637-2fc6c4ab029a ;"transaction has been aborted"


Resolution :

By default all the distributed transactions initiated using System.Transactions have the default timeout of 10 minutes. If we try to override this timeout in the code or in the app.config file it will be adjusted down to 10 minutes. To get around the problem :

1. Added the following section in the machine.config file to set the maxTimeout to 1 hour :

<configuration>
 <system.transactions>
   <machineSettings maxTimeout="01:00:00" />
 </system.transactions>
</configuration> 

2. We modified the System.Transactions section in machine.config by setting the allowExeDefinition attribute to “MachineToApplication” (from MachineOnly). After this, we were able to override the machine.config timeout of 10 minutes in the code and that allowed the transaction to complete successfully.

 <sectionGroup name="system.transactions" type="System.Transactions.Configuration.TransactionsSectionGroup, System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null">
      <section name="defaultSettings" type="System.Transactions.Configuration.DefaultSettingsSection, System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" />
      <section name="machineSettings" type="System.Transactions.Configuration.MachineSettingsSection, System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" allowDefinition="MachineOnly" allowExeDefinition="MachineToApplication" />
    </sectionGroup>

MS DTC's log information has not been configured correctly in the shared cluster registry.

Unable to bring the DTC resource online on the cluster. In the event log :

Event Source: MSDTC
Event ID: 4394
Description: MS DTC's log information has not been configured correctly in the shared cluster registry. Error Specifics:
d:\nt\com\complus\dtc\shared\mtxclu\mtxclusetuphelper.cpp:557, Pid: 5716, CmdLine: C:\WINDOWS\system32\msdtc.exe

Resolution :

This problem might occur if the log path is not set correctly for MSDTC file in a clustered environment.

From the commmand prompt, we ran this command :

msdtc -resetlog

This would set the MSDTC log path to point to the quorum disk. After this the MSDTC resource should come online.

Serviced component : Method-level role based security requires an interface definition for class method.

Problem : We tried to register a serviced component from .Net framework version 2.0 directory using regsvcs.exe. It was installed successfully but with a warning :

WARNING: '<function name>' on class '<namespace.classname>' is not an interface member. Method-level role based security requires an interface
definition for class method.

Resolution :

Checked the Interface definition of the class and it was missing the declaration of <function name> although the function was defined in the class. For method level security to work, all the functions defined in the class should be present in the interface.

Welcome !!!
Working as a Developer Support Professional with Microsoft has been a great experience and to make it more fulfilling I would like to share my learnings with you.
Page view tracker