今天挺高興,專案終於上線使用。只是上線前遇到的問題折磨得人精疲力盡。 。 。不過總算解決了。 。在這把問題說出來,希望對有需要的朋友提供些幫助~~
項目:DOTNET項目,C#開發,主要功能是透過COM組件存取遠端介面。
運作環境:Windows 2003 Server + IIS6.0 + .Net 1.1
問題:COM元件及系統在WINDOWS2000作業系統下都能正常使用,但遷移到WIN2003下,在程式呼叫元件時進程卡住了,有時會回傳伺服器出現意外狀況的錯誤~
原因分析:首先,元件在其它作業系統下通過,說明元件應該沒問題;註冊COM元件及DOTNET專案參考方法皆正確,而錯誤出現在呼叫元件這一步,而COM元件的功能就是透過IP位址及連接埠訪問遠端接口,這裡注意有一個遠端網路連接的工作;上網搜尋類似問題,大部分文章都是組件的權限問題,我也根據文章所寫設置了組件,IIS訪問用戶等的權限,都給予了最大權限,結果還是不行。 。快崩潰了。 。
解決方法:被這個問題折磨了幾天之後,公司聯繫了微軟客戶支持,micro給了個方法,查看下IIS6.0裡的應用程式集的安全權限。查看了下,在IIS裡的應用程式集區屬性中,「標識」標籤下有個預設的安全性帳戶「網路服務」即NetWork Service。 Network Service 是Windows Server 2003 中的內建帳戶,其屬於IIS_WPG 群組,IIS_WPG 的成員具有適當的NTFS 權限和必要的用戶權限,按微軟網站上的文章所說,Network Service 帳戶具有充當IIS 6 工作進程的進程標識的充足權限,以及具有存取網路的權限。但不知道為什麼,這裡的NetWork Service權限不夠,造成不能呼叫元件存取遠端介面。解決的方法就是將IIS_WPG帳號設定為讀取與執行、列出資料夾目錄、讀取,而NETWORK SERVICE則需要完全控制權限。根據上述方法,我把NetWork Service賦於到Administrator組^_|| ,重啟IIS,再運行程序,OK,正常調用組件了~~
因此如果有朋友再有碰到調用COM組件不能用時,考慮一下應用程式集的權限~~
參考以下文章:http: //www.microsoft.com/china/technet/community/columns/insider/iisi1203.mspx
http://flyskywlh.cnblogs.com/archive/2006/07/07 /445508.html