Oracle Services For Microsoft Transaction Server的問題的發現與解決

來源:互聯網
上載者:User
最近重做了本本的作業系統,順便把9i換成了10g,結果新建立的 WEB SERVICE 產生了如下錯誤:

System.DllNotFoundException: 無法載入 DLL (oramts.dll)。 at System.Data.OracleClient.UnsafeNativeMethods.OraMTSJoinTxn(HandleRef pCtxt, ITransaction pTrans) at System.Data.OracleClient.TracedNativeMethods.OraMTSJoinTxn(HandleRef pCtxt, ITransaction pTrans) at System.Data.OracleClient.OciEnlistContext.Join(ITransaction transaction) at System.Data.OracleClient.OracleInternalConnection.Enlist(String userName, String password, String serverName, ITransaction transaction, Guid transactionGuid) at System.Data.OracleClient.OracleInternalConnection.ActivateForDistributedTransaction() at System.Data.OracleClient.OracleInternalConnection.Activate() at System.Data.OracleClient.DBObjectPool.GetObject(Object owningObject, Boolean& isInTransaction) at System.Data.OracleClient.OracleConnectionPoolManager.GetPooledConnection(String encryptedConnectionString, OracleConnectionString options, OracleConnection owningObject, Boolean& isInTransaction) at System.Data.OracleClient.OracleConnection.OpenInternal(OracleConnectionString parsedConnectionString, Object transact) at System.Data.OracleClient.OracleConnection.Open() at Microsoft.Practices.EnterpriseLibrary.Data.Database.OpenConnection() at Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteNonQuery(DBCommandWrapper command) at ReSource.MyLibService.ValidUser(String P_UserID, String P_UserPass) in e:\aspnet\resource\webservice\libservice.asmx.cs:line 55 at ReSource.MyLibService.VerifyCredential() in e:\aspnet\resource\webservice\libservice.asmx.cs:line 41

WEB SERVICE 的代碼如下: [WebMethod(TransactionOption=TransactionOption.Required)]
public string ValidUser(String P_UserID, String P_UserPass) 
{
try
        {                                
        //這裡有一些讀取資料庫的操作。
        //這裡是提交事務
        }
catch(OracleException er)
        {
        //復原事務
        
        } 

開始估計是 10g 的驅動什麼的出了問題。上網搜尋解決辦法。發現有不少的類似的問題。但是沒有什麼很好的解決的方法。

網上這麼說:
 his is an Oracle change, not an MS issue. If you go to otn.oracle.com and
look up ODP.NET, you will find that the two Oracle versions of the ODP (pre
10g and 10g) are different, as well. MS has not updated its implementation
for 10g yet.

基於上面的說法,開始以為9i應該就沒有問題了。於是把10g卸載,重新,安裝9i 。

結果發現也是產生的同樣的問題。但是無論在9i還是10g下面,和WEB SERVICE在同一個目錄下面的asp.net頁面都啟動並執行非常好。於是就百思不得其解。給我鬱悶壞了。當時怎麼也找不到解決的辦法。

網上也找到一些相關的內容。根據裡面的設定,也沒有起作用。

參見:配置Oracle,使它支援MTS下分布事務 、在MTS使用ODP讀寫Oracle是出現無法載入OraMTS的解決辦法

根據裡面的設定,也沒有起作用。

  就上oracle的網站上看看。沒有metlink帳號,所以找東西找的也很辛苦。也基本上沒有什麼收穫。後來,決定不找了,自己看看代碼,找出問題到底出在哪兒。
 
 鑒於在web service中的交易處理不好用,那就從web serivce上下手。我試著換掉了交易處理的代碼。不進行交易處理,把 TransactionOption=TransactionOption.Required 這一句也去掉。運行,一切正常。看來是交易處理相關的Component 出現了錯誤。正好看到oracle網上有 ODP.net的 9207的版本,於是就看了看主要的內容,看到裡面有一個 Oracle Services For Microsoft Transaction Server 9.2.0.7.0 而我的機器上的是9.2.0.1.0版本的,於是下載下來,升級。接著運行帶有交易處理的web service,提示出現引用對象為空白的異常,以前的沒有找到dll檔案的異常沒有了。一陣狂喜,呵呵,離成功不遠了。考慮安裝過程中替換了一些dll可能需要重新啟動才會生效。於是重新啟動。試著運行。ok!正常運行。問題解決。心情輕鬆了不少!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.