WCF Transaction
TransactionFlowOption有三个选项:
一为NotAllowed,这代表了禁止客户端传播事务流到服务端,即使客户端启动了事务,该事务也会被忽略;
二为Allowed,这代表允许客户端的事务传播到服务端,但服务器端不一定会引用到此事务;
三为Mandatory,这代表服务端与客户端必须同时启动事务流,否则就会抛出InvalidOperationException异常。
[ServiceContract(SessionMode=SessionMode.Required)]
public interface IOrdersService
{
[OperationContract]
[TransactionFlow(TransactionFlowOption.Mandatory)]
string PlaceOrder(Order order);
}
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession, TransactionAutoCompleteOnSessionClose=true)]
public class OrdersService : IOrdersService
[OperationBehavior(TransactionScopeRequired=true,
TransactionAutoComplete=false)]
public string PlaceOrder(Order order)
{
using (var conn = new SqlConnection(connString))
{
var cmd = new SqlCommand("Insert Orders (CustomerId) Values( @customerId)", conn);
cmd.Parameters.Add(new SqlParameter("@customerId", order.CustomerId));
try
{
conn.Open();
if (cmd.ExecuteNonQuery() <= 0)
{
return "The order was not placed";
}
cmd = new SqlCommand("Select Max(OrderId) From Orders Where CustomerId = @customerId", conn);
cmd.Parameters.Add(new SqlParameter("@customerId", order.CustomerId));
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
orderId = Convert.ToInt32(reader[0].ToString());
}
}
return string.Format("Order {0} was placed", orderId);
}
catch (Exception ex)
{
throw new FaultException(ex.Message);
}
}
}
[OperationBehavior(TransactionScopeRequired = true,
TransactionAutoComplete = false)]
public string AdjustInventory(int productId, int quantity)
{
using (var conn = new SqlConnection(connString))
{
var cmd = new SqlCommand("Update Products Set OnHand = 1 Where ProductId = @productId", conn);
cmd.Parameters.Add(new SqlParameter("@quantity", quantity));
try
{
conn.Open();
if (cmd.ExecuteNonQuery() <= 0)
{
return "The inventory was not updated";
}
else
{
return "The inventory was updated";
}
}
catch (Exception ex)
{
throw new FaultException(ex.Message);
}
}
}
----------------------client---------------------------
using (var tranScope = new TransactionScope())
{
proxy = new OrdersServiceClient("WSHttpBinding_IOrdersService");
{
try
{
result = proxy.PlaceOrder(order);
tranScope.Commit();
}
catch (FaultException faultEx)
{
}
}
转载于:https://www.cnblogs.com/webglcn/archive/2012/05/03/2480450.html
WCF Transaction相关推荐
- WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式事务编程
今天我们继续学习WCF分布式开发步步为赢系列的12节:WCF事务机制(Transaction)和分布式事务编程.众所周知,应用系统开发过程中,事务是一个重要的概念.它是保证数据与服务可靠性的重要机制. ...
- 化零为整WCF(14) - 事务(Transaction)
[索引页] [源码下载] 化零为整WCF(14) - 事务(Transaction) 作者:webabcd 介绍 WCF(Windows Communication Foundation) - 事务( ...
- 4.WCF事务【Transaction】
契约: namespace Rhythmk.Contracts { [ServiceContract(Namespace="http://wwww.wangkun.com")] p ...
- WCF中的序列化[上篇]
SOA 和Message Windows Communication Foundation (WCF) 是基于面向服务架构(Service Orientation Architecture--SOA) ...
- WCF服务端运行时架构体系详解[下篇]
作为WCF中一个核心概念,终结点在不同的语境中实际上指代不同的对象.站在服务描述的角度,我们所说的终结点实际上是指ServiceEndpoint对象.如果站在WCF服务端运行时框架来说,终结点实际上指 ...
- WCF技术剖析之三十二:一步步创建一个完整的分布式事务应用
在完成了对于WCF事务编程(<上篇>.<中篇>.<下篇>)的介绍后,本篇文章将提供一个完整的分布式事务的WCF服务应用,通过本例,读者不仅仅会了解到如何编程实现事务 ...
- WCF版的PetShop之一:PetShop简介[提供源代码下载]
在<WCF技术剖析(卷1)>的最后一章,我写了一个简单基于WCF的Web应用程序,该程序模拟一个最简单的网上订购的场景,所以我将其命名为PetShop.PetShop的目在于让读者体会到在 ...
- 我的WCF之旅(12):使用MSMQ进行Reliable Messaging(转载)
一.为什么要使用MSMQ 在一个分布式的环境中,我们往往需要根据具体的 情况采用不同的方式进行数据的传输.比如在一个Intranet内,我们一般通过TCP进行高效的数据通信:而在一个Internet的 ...
- 《WCF技术剖析(卷2)》目录
第1章 异常处理 (Exception Handling) 1.1. WCF基本异常处理模式 1.1.1. 当异常从服务端抛出(S101) 1.1.2. 异常细节的传播(S102 ...
最新文章
- 设计模式之代理模式(Proxy)摘录
- CTS ( 19)---Android 8.1/GO GMS认证
- loadrunner11基础使用
- DOTNET零碎要点---1.vb.net利用Oracle.DataAccess.dll链接Oracle数据库
- vv7无法启动显示发动机故障_发动机电控系统常见故障(发动机不能启动)的解决方法...
- 作业五之系统设计时所实现的质量属性战术
- 二分法04:猜数字大小
- mysql存储过程的学习(mysql提高执行效率之进阶过程)
- POJ1159 Palindrome(dp)
- thymeleaf参考手册
- auto dvr_什么是“广播DVR服务器”,为什么在我的PC上运行它?
- 淘宝客返利机器人源码编写教程.
- P1957 口算练习题
- 《风车》——仓央嘉措
- 【MySQL基础篇】数据导出导入权限与local_infile参数
- SpringBoot+Vue实现前后端分离的宠物医院管理系统
- TCP连接的建立和释放过程详解(三次握手、四次挥手)
- 红旗桌面4.0正式版最新使用方法和问题解答100例
- 超级电容锂电池混合储能Simulink仿真
- HJY-F931A/YJ三相电压继电器
热门文章
- ios弧形进度条_iOS手把手教你实现圆形进度条
- LKT系列加密芯片DES加解密以及OpenSSL DES接口实现加解密
- 移动硬盘无法休眠了?
- Excel文档VBA代码自动删除
- 在VB6中保存单色(1Bit)位图(VB6代码)
- 粤港澳大湾区落地首家技术VC,创新工场25亿加持,做投资也做AI研发
- 他们在大学本科实现童年梦想!自研火箭,飞向外太空,创造人类新纪录
- 谷歌云TPU上可以用Julia啦!0.23秒跑100张图片,Jeff Dean点赞推荐
- AI给你安利了一个职位,猜猜它觉得你适合做什么?
- 苹果无人车四个最新专利:手势控制变道、车辆导流、路况感知及车辆控制