操作系統: Windows 2003(IIS 6.0)
程序類型: asp.net web application
Google Map調用方式: HttpWebResponse類去請求Google Map的static api,將HttpWebResponse獲得的Stream保存為圖片
通常情況下,這種做法不會有問題,部署到客戶的服務器上后拋出異常:The remote name could not be resolved:'maps.googleapis.com', 但是Google Map Static Api在瀏覽器中可以看到地圖, 研究后發現只要在asp.net的.cs文件中調用HttpWebResponse或WebClient類操作Google Map Static Api都會拋出上面的異常,在頁面級調用Google Map Api不會有任何問題, 而且同樣的代碼在Windows Form程序中也沒有問題。
發現問題: 只有通過域用戶訪問這個地址后才能看到圖片,即使asp.net web appication集成了windows身份驗證也會拋出上面的異常,但是Windows Form程序是可以看到地圖圖片的
解決辦法: 寫一個控制台應用程序使用同樣的代碼獲取Google Map圖片, 直接運行.exe程序可以獲得地圖圖片
再次執出異常:程序中使用System.Diagnostics.Process調用這個控制台應用程序,但是在.exe程序中拋出同樣的異常,但是手工執行.exe程序卻沒有問題, 而且在asp.net web application的日志記錄的用戶名是當前登錄的域用戶名子, .exe程序的日志記錄的用戶名是NETWORK SERVICE
最終解決辦法:
1. web application不需要集成windows身份驗證
2. 新建一個Application Pool並應用到這個web application上
3. 設置這個application pool的"Application pool identity"為一個域用戶
4. 如果是Windows 2003系統,將這個用戶再加入到IIS_WPG組中.