一段实现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.ExecuteNonQuery(strGUID, "insert into ATMLog(AccountNumber,OperationType) values ('888', 'good')");                myService.CommitTransaction(strGUID);            }            catch(Exception ex)            {                myService.RollbackTransaction(strGUID);            }        }
  但是这样做会不会在性能方面或者其他方面有什么问题,还希望大家一起讨论一下,给出好的建议。