Transactions MSDTC事务超时问题
我现在面临一个MSDTC事务超时问题。 由于历史原因,我们仍然有大量的遗留代码通过C++ ODBC运行DB操作,并且默认情况下连接被升级为MSDTC。 问题是,当我尝试执行耗时超过1分钟的长操作时,事务将由MSDTC自动处理,我发现可以通过组件服务管理工具更改此值, 但是,我可以通过编程方式设置此超时值吗Transactions MSDTC事务超时问题,transactions,timeout,msdtc,Transactions,Timeout,Msdtc,我现在面临一个MSDTC事务超时问题。 由于历史原因,我们仍然有大量的遗留代码通过C++ ODBC运行DB操作,并且默认情况下连接被升级为MSDTC。 问题是,当我尝试执行耗时超过1分钟的长操作时,事务将由MSDTC自动处理,我发现可以通过组件服务管理工具更改此值, 但是,我可以通过编程方式设置此超时值吗 如果您有任何参考资料,我们将不胜感激。我的名字是Tony,我在Microsoft支持部门的分布式事务团队工作。我读过你的帖子,相信我理解你的要求。下面是我为在组件级别进行更改而编写的代码示例。
如果您有任何参考资料,我们将不胜感激。我的名字是Tony,我在Microsoft支持部门的分布式事务团队工作。我读过你的帖子,相信我理解你的要求。下面是我为在组件级别进行更改而编写的代码示例。我希望这能帮助你:
//Connect to the machine
COMAdmin.COMAdminCatalog m_objAdmin1 = new COMAdmin.COMAdminCatalog();
m_objAdmin1.Connect(System.Environment.MachineName.ToString());
//Get a list of COM+ Applications
COMAdmin.COMAdminCatalogCollection objApplications = (COMAdmin.COMAdminCatalogCollection)m_objAdmin1.GetCollection("Applications");
objApplications.Populate();
COMAdmin.COMAdminCatalogObject appToFind = null;
//Find the application you want to change
for (int i = 0; i < objApplications.Count; i++)
{
appToFind = (COMAdmin.COMAdminCatalogObject)objApplications.get_Item(i);
if (appToFind.Name.ToString() == "MSTEST")
{
break;
}
}
//Now find the component in the application you wish to change
COMAdmin.COMAdminCatalogCollection objComponents = (COMAdmin.COMAdminCatalogCollection)objApplications.GetCollection("Components", appToFind.Key);
objComponents.Populate();
COMAdmin.COMAdminCatalogObject ComponentsToFind = null;
for (int i = 0; i < objComponents.Count; i++)
{
ComponentsToFind = (COMAdmin.COMAdminCatalogObject)objComponents.get_Item(i);
if (ComponentsToFind.Name.ToString() == "tdevere_vb6_com.Tdevere")
{
break;
}
}
//Set the Transaction support option
//Enable the overide option
//Set the new value for the time out option
COMAdmin.COMAdminTransactionOptions temp = (COMAdmin.COMAdminTransactionOptions )ComponentsToFind.get_Value("Transaction");
ComponentsToFind.set_Value("Transaction", COMAdmin.COMAdminTransactionOptions.COMAdminTransactionRequiresNew);
ComponentsToFind.set_Value("ComponentTransactionTimeout", 120);
ComponentsToFind.set_Value("ComponentTransactionTimeoutEnabled", true);
//Make sure to save the changes
objComponents.SaveChanges();
objApplications.SaveChanges();
//连接到机器
COMAdmin.COMAdminCatalog m_objAdmin1=新的COMAdmin.COMAdminCatalog();
m_objAdmin1.Connect(System.Environment.MachineName.ToString());
//获取COM+应用程序的列表
COMAdmin.comadmincalogCollection objApplications=(COMAdmin.comadmincalogCollection)m_objAdmin1.GetCollection(“应用程序”);
objApplications.Populate();
COMAdmin.COMAdminCatalogObject appToFind=null;
//查找要更改的应用程序
for(int i=0;i