标签: msdtc

调试时确定事务是否为DTC事务

在.Net中,有没有办法在调试时确定环境事务是否是DTC事务.我调查了SqlConnection类成员,但我什么都没发现.谢谢.

msdtc transactions

7
推荐指数
1
解决办法
1513
查看次数

跨链接Oracle服务器的SQL Server和WCF事务

注意请参阅更新6.它有一个简单的应用程序,演示如何重新创建问题.

我是DTC的噩梦......我们的设置是我们有两个数据库; 一个SQL Server 2008数据库和一个Oracle数据库(11g,我相信).我已经安装了oracle MTS的东西.我将DTC配置为允许分布式事务.对Oracle表的所有访问都通过SQL Server数据库中与链接服务器中的Oracle表相对的视图进行.

(关于DTC配置:选中 - >网络DTC访问,允许远程客户端,允许入站,允许出站,相互身份验证(尝试所有3个选项),启用XA事务和启用SNA LU 6.2事务.DTC登录as NT AUTHORITY\NetworkService)

Our app is an ASP.NET MVC 4.0 app that calls into a number of WCF services to perform database work. Currently the web app and the WCF service share the same app pool (not sure if it's relevant, but just in case...)

Some of our services are transactional, others are not.

Each WCF service that is transactional has the following attribute on its interface: …

c# sql-server oracle msdtc transactions

7
推荐指数
1
解决办法
2543
查看次数

跨不同数据库连接的多个SQL事务命令

我正在为我的应用程序使用.NET 2.0/3.5框架.我需要在多个连接上运行多个SQL命令,每个连接都在不同的服务器上(Oracle,SQL Server).我需要确保这些命令是事务性的.

例如:我需要在Oracle和SQL Server数据库的表中执行INSERT,然后在没有抛出异常的情况下提交它们.如果有异常,我想在需要时在两台服务器上回滚.

我怀疑我需要使用System.Transactions和TransactionScope.这将要求我在数据库服务器和应用程序服务器上设置Microsoft分布式事务处理协调器(MSDTC).

我看起来高低,找不到任何文章描述逐步设置MSDTC与相互身份验证(包括配置防火墙设置和MSDTC设置.)我查看了有关设置MSDTC的Microsoft文档,但它似乎完全没有价值,而不是完整记录(除非你能找到一篇关于如何设置它的非常好的MSDN文章.)

使用MSDTC是完成工作的唯一方法吗?

如果是这样,我该怎么配置呢?

编辑:

  • 我正在为所有机器使用Windows Server 2003.
  • 我有两个SQL Server.一个是SQL Server 2000,另一个是2005.
  • 我有一台Oracle服务器,版本是11g
  • 我们开发的应用程序有时必须以事务方式在所有三个数据库中更改/创建记录.
  • 这不是键盘和椅子之间的问题.我们在MSDN上阅读了有关如何设置MSDTC所有内容的文章,但我们无法使DTCPing和其他测试应用程序正常工作.我们正在寻找详细介绍该过程的分步文章.我不止一次遇到MSDN文档,"遗漏"了做某些事情的步骤.

.net sql t-sql msdtc transactions

6
推荐指数
1
解决办法
3210
查看次数

.NET:如何在System.Transactions中禁用升级?

是否可以使用System.Transactions编程模型而不支持分布式事务?

就像是

  TransactionConfig.DisablePromotion = true;
Run Code Online (Sandbox Code Playgroud)

.net msdtc

6
推荐指数
1
解决办法
4214
查看次数

没有DTC的TransactionScope替代方案

有什么替代transactionScope不需要启用DTC ??

在交易中,我需要做两个操作:

  1. 创建一个用户(使用成员资格--sql成员资格提供者)
  2. 做一次插入操作.

c# msdtc transactions .net-4.0 transactionscope

6
推荐指数
1
解决办法
9257
查看次数

无法开始分布式事务:链接服务器 - > Access数据库

眼镜:

  • Sql Server 2008
  • Server 2008 R2 64位
  • MS Access数据库

什么有效:

  • 我通过安装Office访问数据组件并创建系统DSN等来配置到Access数据库的链接服务器连接.它驻留在同一服务器上的目录中.
  • 我已成功通过openquery查询数据.

    SELECT*FROM OPENQUERY(LINKEDHELL,'SELECT*FROM [D:\ path\mordor.mdb] .Orcs')

  • 我可以通过openquery插入/更新/删除(从Sql Management Studio内部)

什么行不通:

我创建了一个数据库,它公开了一个包含openquery表达式的视图.这允许我的应用程序不知道它通过链接服务器连接查询并允许我使用ORM的事实.例证:实体框架.

但是,在检索数据时,更新/插入/删除不会.我花了很多时间确保MSDTC配置正确,但没有骰子.

我尝试了什么

MSDTC

  • 启用网络DTC访问
  • 允许入站/出站
  • 配置防火墙
  • 启用XA事务
  • 给DTC工作的帐户访问.mdb
  • 进行这些设置后重新启动Sql Server

其他

  • 配置的链接服务器安全性:在sql用户和本地管理员帐户之间创建映射,这样当我使用该sql用户登录时,它使用本地管理员帐户连接到访问数据库.
  • 启用RPC的分布式事务升级:False

我得到的错误:

OLE DB provider "MSDASQL" for linked server "LINKEDHELL" returned message "[Microsoft][ODBC Microsoft Access Driver]Invalid attribute/option identifier ".
Msg 7391, Level 16, State 2, Line 4
The operation could not be performed because OLE DB provider "MSDASQL" for linked server "LINKEDHELL" was unable to …
Run Code Online (Sandbox Code Playgroud)

ms-access msdtc odbc linked-server sql-server-2008

6
推荐指数
1
解决办法
3219
查看次数

如何在EF DbContext和AspNet Membership之间共享连接,以避免事务升级到DTC

我有一个ASP.NET MVC3应用程序,它使用EF 4.1 DbContext,数据库优先数据层.EDMX方法工作正常,因为我倾向于在将应用程序调整到它之前对我的数据模型进行更改.该应用程序适用于包含元数据引用的特殊EF连接字符串.

然而,美中不足的有一只苍蝇.该应用程序还使用需要标准连接字符串的ASP.NET成员资格和角色.我有几个涉及成员资格表和其他(EF托管)表的用例.由于两者使用单独的连接字符串,涉及两者的事务都需要DTS来处理它们.如果我可以帮助它,我不想走那条路,我宁愿应用程序的所有部分只使用相同的连接.

让EF使用普通的连接字符串运行但是让我不知所措.谁能告诉我它是怎么做的,拜托?

asp.net msdtc entity-framework database-connection asp.net-membership

6
推荐指数
2
解决办法
2629
查看次数

MSDTC 日志文件 (MSDTC.LOG) 如何工作?

最近遇到一个错误: Microsoft 分布式事务协调器 (MS DTC) 已取消分布式事务

在论坛的一个回复中提到,原因之一可能是——

已超出 MS DTC 日志文件可容纳的最大活动事务数。如果您希望启动更多并发事务,则必须增加 MS DTC 日志文件的大小。

所以,我很好奇 MS DTC 的日志记录是如何工作的。
1. 是每个分布式事务并且每次事务结束时都会清理文件吗?
或者
2. 是否所有事务日志都会持续存在并且文件会随着时间的推移而增长?(直到达到为 MSDTC.log 文件设置的最大文件大小限制)

我将文件容量从 4MB 更改为 16MB,发现文件大小立即增加,所以我猜测是 1。

但如果有人能详细解释这种“日志记录”是如何工作的,那就太好了。

注意:我对 MS DTC 的工作原理有一定的了解。

sql msdtc distributed-transactions

6
推荐指数
0
解决办法
2457
查看次数

实体框架强制分布式事务

我无法获得以下代码,只使用单个上下文触及单个数据库而不升级到MSDTC,并且在context.SaveChanges()上抛出异常:

public void DeleteGroupDetails(int groupId)
{
    // Note there is no ambient tx
    var thisIsNull = Transaction.Current;

    using (var scope = new TransactionScope())
    {
        var thisIsNotNull = Transaction.Current;

        using (var context = new MyDbEntities())
        {
            var deleted = context.tblGroups.Where(x => x.GroupID == groupId);

            context.tblGroups.RemoveRange(deleted);

            try
            {
                context.SaveChanges();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }

        //scope.Complete();
    }
}
Run Code Online (Sandbox Code Playgroud)

例外情况是"基础提供程序在打开时失败." - 合作伙伴事务管理器已禁用其对远程/网络事务的支持.(HRESULT异常:0x8004D025)

注意:

  • 这是使用EF 6和SQL Server 2005
  • 由于数据库服务器被锁定,我无法使用MSDTC
  • 我想在POC中使用TransactionScope,因为它将在WCF中运行,它内置了TransactionScope,我不想在事务管理中丢弃我的代码.
  • 类似的项目使用NHibernate并没有这个问题

连接字符串是:

connectionString ="metadata = res:// /ResourceAccess.MyDb.csdl|res:// /ResourceAccess.MyDb.ssdl|res://*/ResourceAccess.MyDb.msl;provider=System.Data.SqlClient;provider连接字符串="data source = wil-gvpsqldev01; initial …

c# msdtc entity-framework transactionscope

6
推荐指数
1
解决办法
3536
查看次数

Docker (Linux) 和 Windows 主机中 SQL Server 的 MSDTC 配置问题

我正在迁移本地 SQL Server 开发数据库以在 Linux docker 容器(在同一开发计算机上)中运行。在 Windows 上的 Visual Studio 2019 中运行集成测试时,我收到 MSDTC 错误:

抛出异常:System.Data.dll 中的“System.Transactions.TransactionManagerCommunicationException” System.Data.dll 中发生“System.Transactions.TransactionManagerCommunicationException”类型的异常,但未在用户代码中处理与底层事务管理器的通信失败。

这是我的 docker-compose 中 SQL Server 的最新版本:

services:
  sqlserver:
    image: mcr.microsoft.com/mssql/server:2019-latest
    container_name: SqlServer
    restart: always
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=verySecretPassword
      - MSSQL_RPC_PORT=13500
      - MSSQL_DTC_TCP_PORT=51000
    ports:
      - "1401:1433"
      - "135:13500"
      - "51000:51000"
    volumes:
      - sqldata:/var/opt/mssql
Run Code Online (Sandbox Code Playgroud)

我尝试了各种方法来调整 RPC 端口以使其正常工作。这是 MS 的主要文章。我尝试过端口135:135但它给出了相同的错误。文章底部的注释似乎与我的问题有关。

对于容器外部的 SQL Server 或非根容器,必须在容器中使用不同的临时端口(例如 13500),并且必须将到端口 135 的流量路由到该端口。您还需要在容器内配置从容器端口 135 到临时端口的端口路由规则。

另外,如果您决定将容器的端口 135 映射到主机上的其他端口(例如 13500),则必须在主机上配置端口路由。这使得 docker 容器能够参与与主机和其他外部服务器的分布式事务。

SQL Server 2019 容器以非 …

sql-server msdtc docker docker-compose sql-server-linux

6
推荐指数
1
解决办法
1455
查看次数