當VS.NET2003遇上VS.NET2005,WebService部署何去何從

來源:互聯網
上載者:User
web 問題描敘】

重裝作業系統之後,部署原來的Web Service出現無法訪問、無法調試的問題

【原編程環境】

VS.NET2003(.NET Framework 1.1 SP1),Windows XP SP1

【新編程環境】

VS.NET2003(.NET Framework 1.1 SP1),VS.NET 2005 Beta1(.NET Framework 2.0 ),Windows XP SP2

【問題解決過程】



因為原來的項目一直使用工具VS.NET 2003,所以雖然VS.NET 2005 Beta已經出來好久了,卻沒有時間細細品味,現在項目告一段落,終於有機會了。

重裝系統之後,所有工具都安裝完畢,便將原來的Web Service原始碼直接拷貝到 C:\Inetpub\wwwroot 目錄下,在“Internet 資訊服務(IIS)”中建立為虛擬目錄,然後用 VS.NET2003開啟部署,習慣性的(CTRL+F5)就開始運行了,一切正常,然後試著調用其中的一個方法,卻總是出現如下錯誤:


System.TypeInitializationException: The type initializer for 'System.Transactions.Diagnostics.DiagnosticTrace' threw an exception. ---> System.UnauthorizedAccessException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security.
at System.Diagnostics.EventLog.FindSourceRegistration(String source, String machineName, Boolean readOnly)
at System.Diagnostics.EventLog.SourceExists(String source, String machineName)
at System.Diagnostics.EventLog.SourceExists(String source)
at System.Transactions.Diagnostics.DiagnosticTrace..cctor()
--- End of inner exception stack trace ---
at System.Transactions.Diagnostics.DiagnosticTrace.get_Verbose()
at System.Transactions.Transaction.get_Current()
at System.Data.Common.ADP.GetCurrentTransaction()
at System.Data.Common.ADP.GetCurrentTransaction()
at System.Data.ProviderBase.DbConnectionPool.GetFromTransactedPool(Transaction& transaction)
at System.Data.ProviderBase.DbConnectionPool.GetConnection(Object owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnectionBase owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnectionBase outerConnection)
at System.Data.ProviderBase.DbConnectionBase.Open()
at System.Data.SqlClient.SqlConnection.Open()
at Ezhi.DataAccess.DbHelper.DataAccessHelper.ExecuteDataset(CommandType commandType, String commandText, DataSet dsData, IDbDataParameter[] commandParameters)
at Ezhi.DataAccess.AccessClass.MealModule.RestaurantAccess.GetData(RestaurantData dsData, Int32[] iID)
at JolloRealService.EzhiServices.EzhiService.FillRestaurant()
at JolloRealService.EzhiServices.EzhiService..ctor()


一看出現了“System.TypeInitializationException:”和“Security”的字眼,就知道是安全問題,但是到底問題出在哪裡?我一頭霧水:是程式的問題?是Windows SP2的問題?是許可權的問題?等等等等。於是便想通過 F5 來調試看看,結果彈出如下警告框:





確實看到了“沒有啟用整合Windows身分識別驗證“,初步確定是許可權問題,點擊協助,就進入了MSDN的如下地址頁面

ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/vsdebug/html/vxtbsErrorDebuggingFailedBecauseIntegratedWindowsAuthenticationIsNotEnabled.htm



錯誤:調試失敗,因為沒有啟用整合 Windows 身分識別驗證

由於沒有啟用整合 Windows 身分識別驗證,逐步執行 Web 應用程式或 XML Web services 失敗。因此無法對要求調試的使用者進行身分識別驗證。

啟用整合 Windows 身分識別驗證

1. 用系統管理員帳戶登入到 Web 服務器。

2. 從“開始”菜單中,開啟“管理工具”控制台。

3. 在“管理工具”視窗中雙擊“Internet 資訊服務”。

4. 在“Internet 資訊服務”視窗中,使用樹控制項開啟針對 Web 服務器命名的節點。

5. “Web 網站”檔案夾出現在伺服器名的下面。

6. 您可以為所有 Web 網站或個別 Web 網站配置身分識別驗證。要為所有 Web 網站配置身分識別驗證,請右擊“Web 網站”檔案夾並從捷徑功能表中選擇“屬性”。要為個別 Web 網站配置身分識別驗證,請開啟“Web 網站”檔案夾,右擊個別 Web 網站,並從捷徑功能表中選擇“屬性”。

7. 在“屬性”對話方塊中,選擇“目錄安全性”選項卡。

8. 在“匿名訪問和身分識別驗證”部分,單擊“編輯”按鈕。

9. 在“驗證方法”對話方塊的“已授權的訪問”下,選擇“整合 Windows 身分識別驗證”。

10. 單擊“確定”關閉“驗證方法”對話方塊。

11. 單擊“確定”關閉“屬性”對話方塊。

12. 關閉“Internet 資訊服務”視窗。

按照以上步驟,我把“整合Windows身分識別驗證”勾上了,如下圖:





再次按下 F5,心想總得允許我調試了吧,結果又蹦出了個對話方塊:



ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/vsdebug/html/vxtbsHTTPServerErrors.htm

錯誤:無法在 Web 服務器上啟動調試

請參見

調試指令碼和 Web:錯誤和疑難解答

當試圖對運行在 Web 服務器上的應用程式進行調試時,有時可能會得到具有以下錯誤資訊的訊息:

Unable to start debugging on the Web server

如果遇到這些錯誤,則需要考慮以下幾個問題:

要檢查的內容
遠程伺服器上的 Web 應用程式
儲存在 Visual SourceSafe 中並使用 FrontPage 伺服器擴充的 Web 應用程式
手動附加


這下就更蒙了,完全不知道問題出在哪裡了,都不允許我調試了!老辦法,部署一下看看,我便又(CTRL+F5)了一下,再次調用某個方法,結果還是出現原來的錯誤System.TypeInitializationException:





因為程式以前調試過,所以應該不是程式的問題,那會不會是版本的問題呢,1.1和2.0的衝突?我仔細的檢查了一下 IIS 中的設定,發現有如下一項:



發現預設的 ASP.NET Version 是2.0版本的,也就是說IIS預設選擇了高版本的 Framework,我把版本選擇為 1.1.4322.0,然後點“確定”,再F5調試,這次成功了,再調用方法,一切通過!



【問題延伸】

問題是解決了,回過頭來,為什麼會出現

System.TypeInitializationException: The type initializer for 'System.Transactions.Diagnostics.DiagnosticTrace' threw an exception. ---> System.UnauthorizedAccessException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security.

的錯誤呢?如何通過MSDN的提示找出是版本問題呢?

查看MSDN:

System.TypeInitializationException:作為由類初始值設定項引發的異常周圍的封裝引發的異常。無法繼承此類。

System.UnauthorizedAccessException:當作業系統因 I/O 錯誤或指定類型的安全錯誤而拒絕訪問時所引發的異常。

僅僅通過這一點資訊,我們是無法確定的,於是我Google了一下 “System.UnauthorizedAccessException”

找到以下幾個有用的資訊:

一、

http://blog.csdn.net/wwwsq/archive/2004/11/30/198945.aspx

[ASP.NET]System.UnauthorizedAccessException: 拒絕訪問。

二、

http://www.error-bank.com/microsoft.public.dotnet.framework.webservices/4131_Thread.aspx

這個文章討論的一個部署WebService的相關問題,與許可權相關,但卻和我發現的這個問題無關



看來,出現System.UnauthorizedAccessException的問題有很多種,在這個問題裡面,唯一的解釋就是:

.NET Framework1.1和.NET Framework2.0 之間有一個權限等級,相對來說2.0的許可權更高,1.1的程式無法正常調用2.0的組件。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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