谁帮我解释一下Web Service中的事务该如何理解?-100分
按50,40,30,20,10依次得分 问题点数:100、回复次数:13Top
1 楼qqqdong()回复于 2004-08-02 17:26:10 得分 5
两阶段式事务Top
2 楼bizbuy(也曾风流)回复于 2004-08-02 21:40:46 得分 0
gzTop
3 楼huangsuipeng(hsp|I love foxpig)回复于 2004-08-02 22:24:31 得分 0
所有涉及到的WEB调用COMMIT才COMMITTop
4 楼qqqdong()回复于 2004-08-02 23:59:20 得分 5
[WebMethod(TransactionOption=TransactionOption.Required)]
public void InfoNew(.....)
{
try
{
ContextUtil.EnableCommit();
//写数据库的dll调用
ContextUtil.SetComplete();
}
catch ( Exception error )
{
ContextUtil.SetAbort();
//处理错误
}
}
Top
5 楼jeng(乐去)回复于 2004-08-03 00:28:13 得分 0
kanTop
6 楼LineCorner()回复于 2004-08-03 08:31:41 得分 0
qqqdong() :
为何要多加上这种事务?用Transaction不就可以了吗?Top
7 楼liuspcn(青竹)回复于 2004-08-04 23:44:09 得分 0
收藏Top
8 楼webcool(浪滔天.NET)回复于 2004-08-05 12:30:59 得分 0
■■■高速稳定ASP.NET虚拟主机网站空间SQLSERVER数据库4折优惠酬宾 ■■■
■大海网络软件有限公司(www.dahai.net)是国内最早提供ASP.NET虚拟主机的服务商之一。
至今大海网络积累了大量的客户,服务成本直线下降。为此公司决定对目前所有产品实现降价销售。
========================================================================
■虚拟主机(HTM,ASP,ASP.NET)和数据库产品(SQLSERVER)优惠幅度达4折
========================================================================
HTML-A(100M HTML 空间;赠送25M电子邮件;) 价格:72元
HTML-B(200M HTML 空间;赠送50M电子邮件;) 价格:112元
HTML-C(400M HTML 空间;赠送100M电子邮件;) 价格:192元
HTML-D(800M HTML 空间;赠送200M电子邮件;) 价格:272元
HTML-E(50M HTML 空间;赠送5M电子邮件;) 价格:65元
========================================================================
ASP-A(100M ASP 空间;赠送25M电子邮件;) 价格:96元
ASP-B(200M ASP 空间;赠送50M电子邮件;) 价格:136元
ASP-C(400M ASP 空间;赠送100M电子邮件;) 价格:216元
ASP-D(800M ASP 空间;赠送200M电子邮件;) 价格:376元
ASP-E(50M ASP 空间;赠送5M电子邮件;) 价格:86元
========================================================================
ASP.NET-A(100M ASP.NET 空间;赠送25M电子邮件;) 价格:112元
ASP.NET-B(200M ASP.NET 空间;赠送50M电子邮件;) 价格:192元
ASP.NET-C(400M ASP.NET 空间;赠送100M电子邮件;) 价格:328元
ASP.NET-D(800M ASP.NET 空间;赠送200M电子邮件;) 价格:432元
========================================================================
SQL-A(50M SQL Server 数据库空间;) 价格:112元
SQL-B(100M SQL Server 数据库空间;) 价格:192元
SQL-C(200M SQL Server 数据库空间;) 价格:328元
SQL-D(400M SQL Server 数据库空间;) 价格:432元
========================================================================
MAIL-A(25M 企业域名 电子邮件;) 价格:15元
MAIL-B(50M 企业域名 电子邮件;) 价格:25元
MAIL-C(100M 企业域名 电子邮件;) 价格:50元
MAIL-D(250M 企业域名 电子邮件;) 价格:125元
MAIL-E(500M 企业域名 电子邮件;) 价格:250元
MAIL-F(1000M 企业域名 电子邮件;) 价格:500元
========================================================================
■域名注册(国内国际)和网站推广产品(搜狐,新浪,网易,Google)优惠如下
========================================================================
英文国际顶级域名(.com/.net/.org) 价格:58元
英文国内域名(.cn/.com.cn/.net.cn/.org.cn) 价格:98元
.biz/.info国际英文域名 价格:105元
========================================================================
通用网址 价格:300元
新浪快速登录 价格:300元
新浪搜索固定型及推广型登录 价格:6折
搜狐普通型登录 价格:216元
搜狐搜索固定型及推广型登录 价格:6折
网易搜索经济型服务 价格:300元
网易搜索超值型服务 价格:1500元
Google右侧排名(包年或包月) 价格:7折
新浪竞价排名 价格:8折
搜狐竞价广告 价格:72折
网易竞价广告 价格:55折
雅虎中国搜索排名 价格:75折
========================================================================
■联系大海网络(www.dahai.net)软件有限公司
========================================================================
公司网址:http://www.dahai.net/
联系人:张先生(13179682338),孙先生
电话:0510-8821881,3732767
传真:0510-3732767
在线销售:QQ:3712846,MSN:webcool@dahai.net
支付账号:http://www.dahai.net/pay.aspx
========================================================================
■我们秉承“一点一滴 乃成大海”的理念服务客户Top
9 楼ddggggdd(西红柿炖牛肉)回复于 2004-08-05 13:45:54 得分 20
webservice对于跨数据库事务是不支持的,所以要用到com+的事务,因为webservice提供的是方法Top
10 楼rottenapple(伪程序员)回复于 2004-08-06 17:46:00 得分 30
一两句话说不清楚,看看这篇文章先
http://www-900.ibm.com/developerWorks/cn/webservices/ws-transpec/index.shtmlTop
11 楼fun1984(funy)回复于 2004-08-06 20:23:51 得分 40
给你一个认为比较经典的web service的处理事务的sample
注意要添加引用:using System.EnterpriseService;
[WebMethod(TransactionOption=TransactionOption.RequiresNew)]
//webmethod的这个属性表示在每次调用时是新建一个支持事务的调用
public string TransferMoneyFromBToA(double m){
try
{
ContextUtil.EnableCommit();
this.TransferOutFromB(m);
this.TransferInToA(m);
ContextUtil.SetComplete();
return "Transfer Succeed!";
}
catch(Exception err)
{
ContextUtil.SetAbort();//终止事务
return "Transfer Failed--"+err.Message;
}
}
public string TransferOutFromB(double m)
{
SqlConnection con = new SqlConnection("...");
con.Open();
SqlCommand com = new SqlCommand("update mytable set budget=budget-"+m.ToString()+" where username = 'B'",con);
com.ExecuteNonQuery();
}
public string TransferInToA(double m)
{
SqlConnection con = new SqlConnection("server:local;");
SqlCommand com = new SqlCommand("update mytable set budget=budget+"+m.ToString()+" where username = 'A'",con);
com.ExecuteNonQuery();
}
mytable表的结构简单为
username budget
A 5000
B 5000
该web service实现了事务的典型----银行转帐Top
12 楼fun1984(funy)回复于 2004-08-09 02:31:53 得分 0
Web Service中的事务:
1.处理数据库的,还是可以把业务逻辑写成存储过程,实现事务处理
sample:(两个delete是一个事务),缺点是依赖于数据库类型,更改数据库类型后需要重写
BEGIN TRANS
DECLARE @orderDetailsError int,@productError int
DELETE FROM "Order Details" WHERE ProductID=42
SELECT @orderDetailsError = @@ERROR
DELETE FROM Products WHERE ProductID=42
SLECT @productError = @@ERROR
IF @orderDetailsError = 0 AND @productError = 0
COMMIT TRANS
ELSE
ROLLBACK TRANS
2.使用ADO.NET处理事务,缺点是不能跨越多个数据库连接
conn.Open();//打开一个数据库的连接
SqlTransaction trans = conn.BeginTransacTion();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.Transaction = trans;
try{
cmd.CommandText = "DELETE FROM "Order Details" WHERE ProductID=42";
cmd.ExecuteNonQuery();
cmd.CommandText = "DELETE FROM Products WHERE ProductID=42";
cmd.ExecuteNonQuery();
trans.Commit();
}
catch
{
trans.Rollback();
}
finally
{
conn.Close();
}
3.最好的方法:COM+事务(分布式事务),几乎没有缺点
我上面给出的例子是手动事务,还有自动事务:
[Transaction(TransactionOption.Required)]
public class Class1 : ServicedComponent {
[AutoComplete]
public void Example1()
{
…
}
}
他不需要你给出他什么时候提交[ContextUtil.SetComplete();],什么时候回滚[ContextUtil.SetAbort();],完全自动将函数中的处理作为事务对待.
第三种COM+事务处理机制可以在服务器上的控制面板--管理工具--组件服务找到每一次执行的日志(分布式处理协调器),值得研究.
Top
13 楼LineCorner()回复于 2004-08-10 15:07:45 得分 0
有些了解了谢谢!Top




