2011-03-17 14 views
1

我想以代码的Excel格式下载ssrs报告。通过webrequest的'普通'网址打开ssrs报告格式返回401

所以我第一次检查网址:这是正确的 然后我创建了一个网络请求,与NetworkCredential为同一个用户,可以在浏览器中打开链接。

我搬到发展到SSRS机器本身(其上有VS2008)

所以现在我在SSRS的计算机上,登录为用户A,启动一个网页,创建具有相同凭据的WebRequest因为我目前登录到ssrs机器(用户A)....并得到一个401.

我不知道的是什么是给我的401.是它的网络服务器否认我,或者它是ssrs本身(我是ssrs的新手,所以我不太了解ssrs本身的报告权限,但正如我所说:我的登录凭证与webrequest凭证相同:用户A)。

我google了很多,并尝试了5种解决方案,但迄今为止没有运气。

+0

您能够直接从本地访问报表,也从机?此外,你说你正在使用登录凭据。你如何将凭据传递给Web请求? – 2011-03-22 18:03:22

+0

webrequest.Credential = new networkcredential(“”,“”,“”)。而在服务器上,粘贴在IE浏览器中的uri只是打开报告 – Michel 2011-03-23 07:47:59

+1

请求是什么类型的请求?它是一个控制台或WinForms应用程序或一个ASP.NET Web应用程序?在哪个用户下运行应用程序,并且该用户对ssrs具有“浏览器”权限? – oleschri 2011-03-28 08:39:29

回答

2

这提醒了我的东西,我以前碰到了几年: http://support.microsoft.com/kb/896861

我不知道这个问题是如何可能的,但我真的认为这是值得推行“方法2”从支持文章(一个简单的注册表添加)只是为了看看是否能解决问题。 (是的,文章列出了一堆旧的OS版本,但我成功地使用这种上一堆的SharePoint 2007个服务器来解决问题。)

值得一试,我想......

2

此次荣获”如果NTLM凭据才能将不起作用:

webrequest.Credential = new networkcredential ("","",""); 

你可以尝试以下,但它可能会无法正常工作:

webrequest.Credentials = CredentialCache.DefaultNetworkCredentials; 

有可能到头来你会需要在实际credent传递IALS喜欢:

NetworkCredential networkCredential = new NetworkCredential(UserName, Password, Domain); 
CredentialCache credCache = new CredentialCache(); 
credCache.Add(new Uri(url), "NTLM", networkCredential); 
webrequest.Credentials = credCache; 

SSRS需要正宗的WebRequest和默认/空白凭证不能被传递

+0

是的,对不起,空白的字符串不是很聪明,因为我不想输入实际的字符串,所以我把它们留空。但在我的应用程序中,我输入了正确的凭据。 – Michel 2011-03-23 20:25:42

+0

那么NTLM证书是什么?那是一些其他的东西,然后正常的Windows用户acoount凭据? – Michel 2011-03-23 20:26:11

+0

您可以分享您用于实例化webrequest的代码吗? – 2011-03-24 15:29:51

1

我总是设置

WebRequest.UseDefaultCredentials = True 

然后我运行应用程序的用户访问SSRS服务器。

1

起初我建议在运行调用应用程序的机器上安装Fiddler Web Debugger。这样您就可以准确查看您的应用程序和SSRS之间的请求和响应。您可能会发现像ISA代理想要您额外验证它的东西。

假设您的来电者是一个控制台或Web表单应用程序,下面的代码将在您的应用程序运行到SSRS凭据:

 WebRequest webRequest = WebRequest.Create(url); 
     HttpWebRequest httpWebRequest = webRequest as HttpWebRequest; 

     // request authentication 
     httpWebRequest.UseDefaultCredentials = true; 
     // which is the same as 
     httpWebRequest.Credentials = CredentialCache.DefaultCredentials; 

     // optional proxy authentication 
     httpWebRequest.Proxy.Credentials = CredentialCache.DefaultCredentials;