操作系统: 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组中.