繁体   English   中英

使用HTTPWebRequest获取SSRS报告:错误401

Using HTTPWebRequest to get SSRS report: Error 401

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

各位开发人员大家好,

我目前有一个任务来制作批量报告导出器。 我的想法是,我必须为每个参数集创建一个循环,并使用HTTPWebRequest和Response提取报告,然后将每个参数保存到文件中。

我尝试使用Google上公开图像的URL,它可以100%正常工作。 但是我的问题是,当我尝试从报表服务器获取报表时,出现A 401未经授权的异常。

这是我的代码:

Dim ReportServerURL As String = System.Configuration.ConfigurationManager.AppSettings.Get("reportServerURL")
'Get the needed credentials for opening a connection to the report server.
Dim ReportServerUN As String = System.Configuration.ConfigurationManager.AppSettings.Get("reportServerUN")
Dim ReportServerPW As String = System.Configuration.ConfigurationManager.AppSettings.Get("reportServerPW")
Dim ReportServerDomain As String = System.Configuration.ConfigurationManager.AppSettings.Get("reportServerDomain")
'Get the path to where the reports must be saved.
Dim BTIReportFolderPath As String = Server.MapPath(System.Configuration.ConfigurationManager.AppSettings.Get("bulkReportingFilePath"))
'Create a http request or connecting to the report server.
Dim ReportHTTPRequest As HttpWebRequest = Nothing
'Create a http response to catch the data stream returned from the http request.
Dim ReportHTTPResponse As HttpWebResponse = Nothing
'Create a stream to read the binary data from the http reponse.
Dim ReportStream As Stream = Nothing
Dim ReportFileStream As FileStream = Nothing
'Create an array of bytes to get the binary data from the stream.
Dim ReportBytes As Byte()
Dim ReportBuffer As Integer = 1024
Dim ReportBytesRead As Integer = 0
'Create a webrequest to get the report with all the report parameters included.
ReportHTTPRequest = WebRequest.Create(ReportServerURL & "&UserID=" & UserID & "&InstrumentID=" & InstrumentID & "&AssessmentID=" & AssessmentID & "&OverViewChartURL=" & reportGraphURL & BTIGraphGenerator.SaveBTIGraph(FactorGraph, reportGraphImagePath) & "&NeuroticismChartURL=" & reportGraphURL & BTIGraphGenerator.SaveBTIGraph(NeuroticismGraph, reportGraphImagePath) & "&ExtraversionChartURL=" & reportGraphURL & BTIGraphGenerator.SaveBTIGraph(ExtraversionGraph, reportGraphImagePath) & "&ConscientiousnessChartURL=" & reportGraphURL & BTIGraphGenerator.SaveBTIGraph(ConscientiousnessGraph, reportGraphImagePath) & "&ExperienceChartURL=" & reportGraphURL & BTIGraphGenerator.SaveBTIGraph(ExperienceGraph, reportGraphImagePath) & "&AgreeablenessChartURL=" & reportGraphURL & BTIGraphGenerator.SaveBTIGraph(AgreeablenessGraph, reportGraphImagePath))
'Dim ReportServerCredentials As New CredentialCache()
'ReportServerCredentials.Add(New Uri(ReportServerURL), "Basic", New NetworkCredential(ReportServerUN, ReportServerPW))
'ReportHTTPRequest.PreAuthenticate = True
'ReportHTTPRequest.Credentials = New NetworkCredential(ReportServerUN, ReportServerPW)
'Get the response from the request.
Dim credentials As String = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(ReportServerUN & ":" & ReportServerPW))
ReportHTTPRequest.Headers.Add("Authorization", "Basic" & credentials)
'ReportHTTPRequest.Credentials = New NetworkCredential(ReportServerUN, ReportServerPW, ReportServerDomain)
'Get the response from the request.
Try
    ReportHTTPResponse = ReportHTTPRequest.GetResponse()
    Catch ex As Exception
    ReportHTTPResponse = ReportHTTPRequest.GetResponse()
End Try

'Read the binary stream from the http response.
ReportStream = ReportHTTPResponse.GetResponseStream()
ReportBytes = New Byte(ReportBuffer) {}
ReportBytesRead = ReportStream.Read(ReportBytes, 0, ReportBuffer)
ReportFileStream = New FileStream(NewBTIReportFolder.FullName & "ASiame" & Guid.NewGuid.ToString() & ".pdf", FileMode.Create)
Do While ReportStream.CanRead And ReportBytesRead > 0
    ReportFileStream.Write(ReportBytes, 0, ReportBytesRead)
    ReportBytesRead = ReportStream.Read(ReportBytes, 0, ReportBuffer)
Loop

ReportHTTPResponse.Close()
ReportStream.Close()
ReportFileStream.Close()

注释掉的所有点都是我尝试传递凭据的所有方法。

我是服务器上的管理员,但仍然无法通过身份验证。

在此先感谢您的帮助:)

1 个回复

我找到了答案。 我一直尝试:ReportHTTPRequest.Credentials = CredentailCache.DefaultCredentials()而不是:ReportHTTPRequest.Credentials = CredentailCache.DefaultNetworkCredentials()

关于第二个问题,我发现使用本地IP代替URL可以很好地工作。 我猜想使用URL尝试将请求从服务器外部路由,然后再返回到服务器。 使用本地IP将请求保持在内部,并且可以神奇地工作。

1 C#HttpWebRequest响应错误(401)

如果我看起来好像在做蠢事,请原谅。 我曾尝试浏览其他堆栈溢出问题以找到问题的答案,但似乎什么也没找到。 我正在开发一个dotnet核心MVC应用程序,并希望从远程服务器返回一些数据。 我正在使用HttpWebRequest类。 在Fiddler中,我使用作曲家执行了以下操作。 ...

3 使用HttpWebRequest获取有关错误的数据

与API交互时,存在一种情况,即它们将返回包含数据的401响应。 无论响应的错误代码如何,我都想返回此数据。 我创建了一个函数,该函数使用HttpWebRequest提交GET或POST,该函数返回包含响应数据的字符串。 唯一的问题是,如果响应为401,则会引发错误,并且不会读取数据。 ...

4 HttpWebRequest(401)未经授权使用正确的凭据

在尝试从URL下载文件时,我无法让WebRequest通过身份验证。 我已经验证了,直接点击网址并提示用户名/密码表单,我的凭据通过就好了,文件被下载到我的电脑。 但是,当使用WebRequest(带代理)时,我得到(401)身份验证失败。 它绝对是通过代理身份验证,因为我之前获 ...

6 获取SSRS的报告列表?

我刚刚开始使用SSRS,到目前为止,我已经能够使用ReportViewer在我的Winforms应用程序中显示报告,通过硬编码报告路径。 我想从SSRS获取一份报告列表,这样我就可以显示它们并让用户选择他们想要查看的报告。 有没有办法要求SSRS报告清单? 谢谢。 ...

7 SSRS报告以错误结尾

我使用此表达式= Avg(Fields!AncinitetAntalDag.Value)来获得每位员工的平均资历,但是我得到了#Error,我也不知道为什么! 我努力了几个小时才知道如何解决这个问题! 有人可以指出正确的方向吗? 设计图 预习 : 查询设计: ...

8 使用HttpWebRequest获取HttpOnly cookie

我正在尝试使用.NET的HttpWebRequest POST方法(代码用C#编写)以编程方式登录网站。 最初,我将请求发送到登录页面,将响应cookie保存到CookieContainer,然后进行第二个HttpWebRequest,并使用编码后的登录详细信息(email =“ MyEmai ...

10 具有基本身份验证的HttpWebRequest失败,DefaultNetworkCredentials出现401错误

我正在使用本地Web服务器(IIS,Windows 8)测试应用程序,该站点需要基本身份验证,并且只要我明确地传递我的凭据,一切都可以正常工作: 但是我想使用集成安全性,因此我尝试如下更改第一行: (我也尝试了DefaultCredentials) 我检查了Fiddler的 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM