2013-04-26 67 views
2

的問題是,我們有一個網站上的一個獨立的網絡服務器(Windows 2003的SP2 - 機器名稱是TESTAPP它可以是以下孫中山在日誌中),它採用的TransactionScope。MSDTC從獨立的機器到域計算機

SQL Server 2008 R2計算機(Windows Server 2008)位於域中。

當單機打是它失敗的TransactionScope(錯誤細節將隨之而來)。

當我在同一個域中DB服務器從運行的機器代碼,它工作正常。

在獨立的機器,我得到的無處不在的錯誤:

Error HRESULT E_FAIL has been returned from a call to a COM component. 

然而MSDTC設置正確,它使用網絡服務的方式。 DTCPing.exe兩種工作都很好。

在挖掘到數據庫機器,我發現了以下審覈失敗:

帳戶無法登錄。

Subject: 
Security ID:  NULL SID 
Account Name:  - 
Account Domain:  - 
Logon ID:  0x0 

Logon Type:   3 

Account For Which Logon Failed: 
Security ID:  NULL SID 
Account Name:  TESTAPP$ 
Account Domain:  WORKGROUP 

Failure Information: 
Failure Reason:  Unknown user name or bad password. 
Status:   0xc000006d 
Sub Status:  0xc0000064 

Network Information: 
Workstation Name: TESTAPP 
Source Network Address: 192.168.**.** 
Source Port:  1202 

的單機試圖登錄到SQL Server計算機使用它自己的機器名,天知道它是什麼用的密碼。

因此是有可能得到MSDTC從單機工作到域的機器?

P.S.如果可能的話(如果有另一種方法),我不想影響'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSDTC \ TurnOffRpcSecurity'註冊表項。

P.P.S.如果可能的話,我想在MSDTC上保持相互認證要求(我知道一種可能的解決方案是將MSDTC設置爲不需要認證,但我不確定這是否完全有必要)

有關奇怪的事情它正在使用測試獨立Web服務器域DB服務器MSDTC工作正常,無論設置爲無身份驗證或相互身份驗證! :S

P.P.S.防火牆在兩臺機器上都關閉。

回答

1

您可以在數據訪問方法只使用一個連接對象。這樣MSDTC永遠不會被觸發。我有類似的經驗,但無法調整SQL服務器。使用單例模式,我創建了數據連接,並在多個方法調用中的事務中使用同一個連接對象。

+0

事實上,我用一個連接,並通過它來多種方法,在訪問多個數據庫實例DTC踢不過時,看到http://stackoverflow.com/questions/1690892/transactionscope-automatically-escalating-to- msdtc-on-some-machines提供了一些有趣的見解,PS使用SQL 2000 dtc會被全部使用:S – 2013-05-07 11:31:04

+0

另請參閱上面鏈接中的更新1部分,根據MS跨域的邊界將導致DTC啓動。 – 2013-05-07 11:37:53

+0

謝謝保羅我從來不知道這一點。我一直試圖將我的所有需求保留在一個數據庫中。所有外部數據庫內容都通過(web/WCF)服務進行訪問和更新。所以我從來沒有遇到過那個。 – Justjyde 2013-05-07 11:47:15