2010-04-07 64 views
0

我正在从IIS 7.5 Web服务器上单击一次部署项目。安装父应用程序(即设置IIS站点)后,我可以从远程框中点击一次性应用程序配置文件的URL。然而,当我尝试从我的应用程序(和下面的存根应用程序)做同样的事情时,我得到了401未授权的应用程序。IIS 7.5无法从托管代码访问文件

从IE浏览器和.NET应用程序打网址有什么区别?
目前,文件和目录本身具有授予网络服务器上所有人的完全控制权,并且我是包装盒上的管理员。我们仅将Windows身份验证与NTLM一起使用。

谢谢, -Bob

这里是存根的应用程序,产生401 - 未授权上doc.Load()线时。我可以从IE浏览器成功击中同一个网址,打开文件...

static void Main(string[] args) 
    { 
     Console.WriteLine("Config Test"); 
     string filename = "http://dev-rs/myClient/myClickOnce/myApp.config.xml"; 
     Console.WriteLine(filename); 
     XmlDocument doc = new XmlDocument(); 
     doc.Load(filename); 
     Console.WriteLine("Loaded"); 
     Console.WriteLine("Inner Text : " + doc.InnerText); 
    } 

回答

1

确立的原则:

AppDomain currentDomain = AppDomain.CurrentDomain; 
currentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 

的XMLDocument不支持从URL加载时传递凭据。而是从WebRequest流加载,并在加载之前在请求上设置凭据。

WebRequest request = HttpWebRequest.Create(filename); 
request.Credentials = CredentialCache.DefaultCredentials; 

XmlDocument doc = new XmlDocument(); 
doc.Load(request.GetResponse().GetResponseStream()); 
+0

这个伎俩!注意到我没有这样做,在从应用程序的后续webService调用...必须在CredentialCache.DefaultCredentials设置凭据以及。 – Bob 2010-04-07 19:41:29