请高手看看这段代码的可行性?谢谢
一段实现WEBSERVICE有状态的一段代码实现,请高手看看这样做的可行性?
实现思路如下:
  WebService提供创建数据库连接和控制事务的方法,在创建SqlConnection的时候同时返回给客户端一个GUID,服务器端通过把该GUID作为Key将SqlConnection对象和SqlTransaction对象放到Session(要用[WebMethod(EnableSession = true)来使Session可用])或着Application中,通过有状态的WebService记住服务器端的状态。
  具体代码如下所示:
[WebMethod(EnableSession=true)]
    public string CreateConnection()
    {
        string strGUID = Guid.NewGuid().ToString();
        SqlConnection mySqlConnection = new SqlConnection(strConnString);
        Session[strGUID + "Connection"] = mySqlConnection;
        Common.JTLog.WriteEventLog("toby", Common.JTLog.LogType.Error, strGUID + "Connection");
        return strGUID;
    }
    [WebMethod(EnableSession = true)]
    public void BeginTransaction(string strGUID)
    {
        SqlConnection mySqlConnection = (SqlConnection)Session[strGUID + "Connection"];
        if (mySqlConnection.State == ConnectionState.Closed)
        {
            mySqlConnection.Open();
        }
        SqlTransaction mySqlTransaction = mySqlConnection.BeginTransaction();
        Session[strGUID + "Transaction"] = mySqlTransaction;
    }
    [WebMethod(EnableSession = true)]
    public void CommitTransaction(string strGUID)
    {
        SqlConnection mySqlConnection = (SqlConnection)Session[strGUID + "Connection"];
        SqlTransaction mySqlTransaction = (SqlTransaction)Session[strGUID + "Transaction"];
        mySqlTransaction.Commit();
        if (mySqlConnection.State == ConnectionState.Open)
        {
            mySqlConnection.Close();
        }
    }
    [WebMethod(EnableSession = true)]
    public void RollbackTransaction(string strGUID)
    {
        SqlConnection mySqlConnection = (SqlConnection)Session[strGUID + "Connection"];
        SqlTransaction mySqlTransaction = (SqlTransaction)Session[strGUID + "Transaction"];
        mySqlTransaction.Rollback();
        if (mySqlConnection.State == ConnectionState.Open)
        {
            mySqlConnection.Close();
        }
    }
    [WebMethod(EnableSession = true)]
    public int ExecuteNonQuery(string strGUID, string strCmdText)
    {
        SqlConnection mySqlConnection = (SqlConnection)Session[strGUID + "Connection"];
        SqlTransaction mySqlTransaction = (SqlTransaction)Session[strGUID + "Transaction"];
        SqlCommand objSqlCommand = new SqlCommand(strCmdText);
        objSqlCommand.Connection = mySqlConnection;
        objSqlCommand.Transaction = mySqlTransaction;
        return objSqlCommand.ExecuteNonQuery();
    }
  如果用Session保存状态的话,那客户端一定要通过myService.CookieContainer = new System.Net.CookieContainer();创建一个CookieContainer 来关联Session,如果使用Application对象保存的话就没有必要了。
  客户端代码如下:
static void Main(string[] args)
        {
            TransactionService.Service myService = new TestProject.TransactionService.Service();
            myService.CookieContainer = new System.Net.CookieContainer();
            string strGUID = myService.CreateConnection();
            try
            {
                myService.BeginTransaction(strGUID);
                myService.ExecuteNonQuery(strGUID, "update ATMAccount set Amount = 1000");
                myService.Exec