在.Net中,有没有办法在调试时确定环境事务是否是DTC事务.我调查了SqlConnection类成员,但我什么都没发现.谢谢.
注意请参阅更新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: …
我正在为我的应用程序使用.NET 2.0/3.5框架.我需要在多个连接上运行多个SQL命令,每个连接都在不同的服务器上(Oracle,SQL Server).我需要确保这些命令是事务性的.
例如:我需要在Oracle和SQL Server数据库的表中执行INSERT,然后在没有抛出异常的情况下提交它们.如果有异常,我想在需要时在两台服务器上回滚.
我怀疑我需要使用System.Transactions和TransactionScope.这将要求我在数据库服务器和应用程序服务器上设置Microsoft分布式事务处理协调器(MSDTC).
我看起来高低,找不到任何文章描述逐步设置MSDTC与相互身份验证(包括配置防火墙设置和MSDTC设置.)我查看了有关设置MSDTC的Microsoft文档,但它似乎完全没有价值,而不是完整记录(除非你能找到一篇关于如何设置它的非常好的MSDN文章.)
使用MSDTC是完成工作的唯一方法吗?
如果是这样,我该怎么配置呢?
编辑:
是否可以使用System.Transactions编程模型而不支持分布式事务?
就像是
TransactionConfig.DisablePromotion = true;
Run Code Online (Sandbox Code Playgroud) 有什么替代transactionScope不需要启用DTC ??
在交易中,我需要做两个操作:
我已成功通过openquery查询数据.
SELECT*FROM OPENQUERY(LINKEDHELL,'SELECT*FROM [D:\ path\mordor.mdb] .Orcs')
我可以通过openquery插入/更新/删除(从Sql Management Studio内部)
我创建了一个数据库,它公开了一个包含openquery表达式的视图.这允许我的应用程序不知道它通过链接服务器连接查询并允许我使用ORM的事实.例证:实体框架.
但是,在检索数据时,更新/插入/删除不会.我花了很多时间确保MSDTC配置正确,但没有骰子.
MSDTC
其他
我得到的错误:
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) 我有一个ASP.NET MVC3应用程序,它使用EF 4.1 DbContext,数据库优先数据层.EDMX方法工作正常,因为我倾向于在将应用程序调整到它之前对我的数据模型进行更改.该应用程序适用于包含元数据引用的特殊EF连接字符串.
然而,美中不足的有一只苍蝇.该应用程序还使用需要标准连接字符串的ASP.NET成员资格和角色.我有几个涉及成员资格表和其他(EF托管)表的用例.由于两者使用单独的连接字符串,涉及两者的事务都需要DTS来处理它们.如果我可以帮助它,我不想走那条路,我宁愿应用程序的所有部分只使用相同的连接.
让EF使用普通的连接字符串运行但是让我不知所措.谁能告诉我它是怎么做的,拜托?
asp.net msdtc entity-framework database-connection asp.net-membership
最近遇到一个错误: Microsoft 分布式事务协调器 (MS DTC) 已取消分布式事务
在论坛的一个回复中提到,原因之一可能是——
已超出 MS DTC 日志文件可容纳的最大活动事务数。如果您希望启动更多并发事务,则必须增加 MS DTC 日志文件的大小。
所以,我很好奇 MS DTC 的日志记录是如何工作的。
1. 是每个分布式事务并且每次事务结束时都会清理文件吗?
或者
2. 是否所有事务日志都会持续存在并且文件会随着时间的推移而增长?(直到达到为 MSDTC.log 文件设置的最大文件大小限制)
我将文件容量从 4MB 更改为 16MB,发现文件大小立即增加,所以我猜测是 1。
但如果有人能详细解释这种“日志记录”是如何工作的,那就太好了。
注意:我对 MS DTC 的工作原理有一定的了解。
我无法获得以下代码,只使用单个上下文触及单个数据库而不升级到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)
注意:
连接字符串是:
connectionString ="metadata = res:// /ResourceAccess.MyDb.csdl|res:// /ResourceAccess.MyDb.ssdl|res://*/ResourceAccess.MyDb.msl;provider=System.Data.SqlClient;provider连接字符串="data source = wil-gvpsqldev01; initial …
我正在迁移本地 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 容器以非 …