測試文字功能,小工具,標題

記錄很重要,不然會浪費很多時間在找以前的記憶

一個人的氣度,決定他未來的高度。

2016年1月18日 星期一

ASP.NET 交易 TransactionScope MSDTC 記錄

ASP.NET 交易 TransactionScope MSDTC 記錄



如果WEB跟SQLSERVER不同台,可能要另外設定,測試環境是沒有網域的環境

WEB  OS W7 64位元,ASP.NET 跑在  Apache HTTP Server 2.2

SQLSERVER OS 是 2012 R2

1.執行 dcomcnfg

2.元件服務 > 電腦 > 我的電腦 Distributed Transaction Coordinator > 本機DTC 右鍵內容 > 安全性 

3.設定如下,WEB跟SQLSQEVER都要設定

網路 DTC 存取 打勾

允許遠端用戶端 打勾

允許遠端系統管理 打勾

允許輸入 打勾

允許輸出 打勾



4.WEB這台另外要設定

元件服務 > 電腦 >  我的電腦 右鍵 內容 > MSDTC

使用本機協調器 不能打勾  > 選取 > WORKGROUP\XXX > 會要求輸入XXX這台電腦的帳密,帳號要KEY成 XXX\ADMINISTRATOR這樣

如果找不到電腦,請到C:\Windows\System32\drivers\etc\hosts 加入 192.168.1.XXX 電腦名稱


5.WEB跟SQLSERVER這二邊的防火牆要設定一下,讓 分散式異動協調器 可以進跟出

可以利用DTCPING測試,我也還沒測,先記一下

補充 : 
本來防火牆是先全開,後來有關起來,再對輸入輸出的 分散式異動協調器 設定,但好像沒設定好,跑出了這個


6.設定完如果還是不行,先把SQLSERVER重開一下試看看,有時要等一下下,應該是要等設定生效,微軟設定有時都要過一段時間才會生效

=================== ASP.NET的程式如下 ===========================
 //刪除收案資料
    public void delaccept()
    {
        using (TransactionScope scope = new TransactionScope())
        { 
            using (SqlConnection conn1 = new SqlConnection(strConn))
            {
                try
                {
               
                    String strCmd1 = @"DELETE FROM liver_accept WHERE patno=@patno";
                    using (SqlCommand cmd = new SqlCommand(strCmd1, conn1))
                    {
                        cmd.Parameters.AddWithValue("@patno", lblinfopatno.Text);
                        conn1.Open();
                        cmd.ExecuteNonQuery(); 
                    }

                        using (SqlConnection conn2 = new SqlConnection(strConn))
                        {
                            try
                            {

                                String strCmd2 = @"DELETE FROM Search WHERE patno=@patno";
                                using (SqlCommand cmd = new SqlCommand(strCmd2, conn2))
                                {
                                    cmd.Parameters.AddWithValue("@patno", lblinfopatno.Text);
                                    conn2.Open();
                                    cmd.ExecuteNonQuery();
                               
                                }

                            }
                            catch (Exception ex2)
                            {
                                // 例外狀況
                              //無效,有空再測試,因為有用UpdatePanel1
                              //  ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "err", "alert('" + ex2 + "');", true);
                              //  ScriptManager.RegisterStartupScript(this, this.GetType(), "err", "alert('" + ex2 + "');", true);
                            }
                            finally
                            {
                                conn2.Close();
                            }
                        }              
                }
                catch (Exception ex1)
                {
                    // 例外狀況
//無效,有空再測試,因為有用UpdatePanel1
                  //  ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "err", "alert('" + ex1 + "');", true);

                   // ScriptManager.RegisterStartupScript(this, this.GetType(), "err", "alert('" + ex1 + "');", true);
                }
                finally
                {
                    conn1.Close();
                }
            }
         scope.Complete();           
        }
    }

沒有留言:

張貼留言