WebService的事务

今天通过和远程的朋友测试了一下WebService的事务,解开了我很多的迷惑,也进一步知道了改怎么应用它。
如下代码:
[WebMethod(TransactionOption = TransactionOption.RequiresNew)]
  public string Trans(int ThreadSleep,int Money)
  {
   try
   {   //实现一个自动的事物----数据库中BANK的内容
    ContextUtil.EnableCommit();
    this.SubSqlServer(Money);  //访问SqlServer数据库
    Thread.Sleep(ThreadSleep);
    this.AddSqlServer(Money);         //访问SqlServer数据库
    ContextUtil.SetComplete();       //如果扣款与加款都成功
    
        return "转帐成功!";
   }
   catch(Exception e)
   {
    ContextUtil.SetAbort();        //如果发生异常的就回滚事物。
        return "转帐失败:" + e.Message.ToString();
   }
  }
 public void SubSqlServer(int money)        
  {
   try
   {
    SqlConnection cnn = new SqlConnection(@"data source=bmonkey;uid=sa;pwd=123;initial catalog=test");
    cnn.Open();
    SqlCommand cmd = new SqlCommand("UPDATE Bank Set money = money - " + money.ToString() + " WHERE UserId = 'a'",cnn);
    cmd.ExecuteNonQuery();
   }

   catch(Exception e)
   {
    throw new Exception("localhostSQL数据库操作失败::" + e.Message.ToString());
   }
   
  }

  public void AddSqlServer(int money)     
  {
   try
   {
    SqlConnection cnn = new SqlConnection(@"server=kongchan;uid=sa;pwd=123;database=test");
    cnn.Open();
    SqlCommand cmd = new SqlCommand("UPDATE Bank Set money = money + " + money.ToString() + " WHERE UserId = 'a'",cnn);
    cmd.ExecuteNonQuery();
   }
    
   catch(Exception e)
   {
    throw new Exception("本地SQL数据库操作失败:" + e.Message.ToString());
   }
  }

测试环境:不同网段.和ip地址,异地,分别通过两地都调用WebService

开始测试的时候抛出我的本地sqlserver未启动DTC的异常(原来最后也用到了sqlserver的DTC,那么如果是sqlserver和access的话,是否就不能同步了呢?),于是启动DTC;后来还抛出‘0x8004D00E’异常,经过一番折腾,最后还是总算能运行了。而且两个sqlserver的操作也是和当初设想的一样,要吗都成功,要吗都不成功。

最后总结一下其中需要注意的地方:
1。启动sqlserver 的DTC
2。连接字符串一定要用机器名字来连接。如:server=kongchan;uid=sa;pwd=123;database=test  的server。
3。如果调用不成功,可以使用DTCPing.exe工具来测试一下两地的sqlserver的DTC是否正常工作。
4。配置C:/WINNT/system32/drivers/etc下的hosts文件,添加ip地址和机器名的匹配。如下举例:
     127.0.0.1       localhost
     192.168.0.7   bmonkey
5。DTCPing.exe的下载地址:http://support.microsoft.com/default.aspx?scid=kb;zh-tw;306843,这篇文章还有很多关于Ms DTC 的问题处理办法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值