下面给出的是我的示例代码。它们都是来自客户端的服务同步调用。我这里的问题是,我的远程服务将如何知道调用-
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
try
{
ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
obj.UpdateData();
ServiceReference2.Service1Client obj1 = new ServiceReference2.Service1Client();
obj1.UpdateData();
ts.Complete();
}
catch (Exception ex)
{
ts.Dispose();
}
}
我正在使用WSHttp绑定。我的问题是:
WSHttp绑定和basicHttp绑定都支持事务吗?
您需要使用WSHttpBind来使用TransactionScope,因为BasicHttpBind不支持事务所需的WS-*标准。
在“ts.完成()”调用期间或在客户端范围内的异常期间,是否会对远程wcf服务进行请求调用以使事务管理器提交/回滚他的工作
完整调用并不能保证所有内容都提交。这告诉事务管理器你完成了。是对事务所有者的完整调用导致事务管理器通知各方提交或回滚。如果它不能与各方通信,它将抛出异常。
因此,为了回答这个问题,对子参与者(即不是所有者)的完整调用不会导致对事务管理器的调用,但来自所有者-参与者的完整调用确实会调用事务管理器,然后事务管理器将尝试提交。
TransactionScope使用MSDTC:
MSDTC是微软分布式事务协调器的首字母缩写。顾名思义,MSDTC是一种为分布式系统提供事务基础设施的Windows服务。在这种情况下,事务意味着构建分布式系统中自治代理之间交互的一般方式。每个事务都是具有四个关键属性的状态转换——ACID属性:原子(全部或全部)、一致(合法)、隔离(独立于并发事务)和持久(一旦发生,就不能被废除)。实现ACID属性的技术有不同,但最著名的是两阶段提交。
你应该从这篇文章开始:http://blogs.msdn.com/b/florinlazar/archive/2004/03/04/what-is-msdtc-and-why-do-i-need-to-care-about-it.aspx