SSRS 报告查看器 + ASP.NET 凭据 401 异常

2023-12-31

我在 SQL2005 报告服务器上保存了一份报告,我想返回该报告的渲染 PDF。我在使用本地 *.rdlc 文件时发现了这一点(我已经在博客上介绍过它 http://www.jarrettmeyer.com/2009/09/reports-in-aspnet-mvc.html),但当 *.rdl 驻留在报告服务器上时则不然。我得到了401 未授权线路错误...

reportViewer.ServerReport.SetParameters(reportDefinition.ReportParameters);

这是用于呈现报告的方法。

public byte[] Render(IReportDefinition reportDefinition)
{
    var reportViewer = new ReportViewer();
    byte[] renderedReport;
    try
    {
        var credentials = new WindowsImpersonationCredentials();
        reportViewer.ServerReport.ReportServerUrl = new Uri("http://myssrsbox", UrlKind.Absolute);
        reportViewer.ServerReport.ReportServerCredentials = credentials;
        reportViewer.ServerReport.ReportPath = reportDefinition.Path;
        // Exception is thrown on the following line...
        reportViewer.ServerReport.SetParameters(reportDefinition.ReportParameters);

        string mimeType;
        string encoding;
        string filenameExtension;
        string[] streams;
        Warning[] warnings;

        renderedReport = reportViewer.ServerReport.Render(reportDefinition.OutputType, reportDefinition.DeviceInfo, out mimeType, out encoding, out filenameExtension, out streams, out warnings);
    }
    catch (Exception ex)
    {
        // log the error...
        throw;
    }
    finally
    {
        reportViewer.Dispose();
    }
    return renderedReport;
}

您缺少的另一件事是 Windows Impersonation Credentials 类。

public class WindowsImpersonationCredentials : IReportServerCredentials
{
    public bool GetFormsCredentials(out Cookie authCookie, out string userName, out string password, out string authority)
    {
        authCookie = null;
        userName = password = authority = null;
        return false;
    }

    public WindowsIdentity ImpersonationUser
    {
        get { return WindowsIdentity.GetCurrent(); }
    }

    public ICredentials NetworkCredentials
    {
        get { return null; }
    }

    public override string ToString()
    {
        return String.Format("WindowsIdentity: {0} ({1})", this.ImpersonationUser.Name, this.ImpersonationUser.User.Value);
    }
}

您可能需要了解的其他事项...

  • 它正在 Intranet 上运行,并且模拟已打开。
  • 日志记录表明模拟用户设置正确。
  • This 确实有效在 Visual Studio 中运行时(http://localhost:devport),并且它确实有效在我的开发盒上运行时(http://localhost/myApplication). It 不起作用在我们的测试或生产服务器上运行时。
  • 我尝试过在 web.config 中使用和不使用 system.net.defaultProxy 设置的解决方案。两者都不起作用。

我究竟做错了什么?是服务器设置吗?是代码吗?是 web.config 吗?


我们终于弄清楚了问题所在。我们的网络管理员已禁用双跳,因此虽然模拟可以正确连接domain\jmeyer,应用程序仍在尝试连接到 SRS 盒domain\web01$。为什么要这样设置呢?因为双跳是一个巨大的安全漏洞。 (至少有人告诉我。这听起来像你会读到的东西吗?每日 WTF http://thedailywtf.com/?)

我们的解决方案是创建一个通用的domain\ssrs_report_services用户,并使用以下网络凭据与该用户连接

public class CustomCredentials : IReportServerCredentials
{
    public bool GetFormsCredentials(out Cookie authCookie, out string userName, out string password, out string authority)
    {
        authCookie = null;
        userName = password = authority = null;
        return false;
    }

    public WindowsIdentity ImpersonationUser
    {
        get { return null; }
    }

    public ICredentials NetworkCredentials
    {
        get { return new NetworkCredential("ssrs_report_services", "password", "domain") ; }
    }    
}

以上是您可以在互联网上找到的经典示例解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSRS 报告查看器 + ASP.NET 凭据 401 异常 的相关文章

  • 如何让 webpack 和 iis express 协同工作?

    I have Angular 2 和 Webpack 2 入门 https github com qdouble angular webpack2 starter它通过 webpack dev server 在节点上运行 我如何使用 web
  • 为什么不是所有具有 Text 属性的 System.Web.UI.WebControl 类都实现 ITextControl?

    我很好奇为什么只有一些System Web UI WebControl当控件具有与接口相同的属性时 它们会实现某些接口 例如 有很多控件具有 Text 属性 但只有以下实现ITextControl Label Literal 数据绑定文字
  • 从 ASP.NET MVC 将 HTML 表导出到 Excel

    我目前正在使用 ASP NET MVC 并且有一个操作方法 可以在视图中以表格格式显示一些报告 我需要通过单击视图中的按钮将同一个表导出到 Excel 文档 如何才能实现这一目标 您将如何为此创建 Action 方法 在您的控制器操作中 您
  • 使用“dnupublish”排除发布项目上的文件夹

    如何使用 dnupublish 命令从 wwwroot 中排除文件夹 示例 在我的项目中存在许多文件夹 我需要排除wwwroot lib and wwwroot 源 我正在使用 clr 1 0 0 beta7 12302 The wwwro
  • 通过文件上传控件上传文件时重命名c#.net中的文件并将文件的更改名称保存在数据库中

    我有文件上传器 通过它浏览文件 并将浏览文件的名称存储在字符串变量中 现在我想用存储在另一个字符串变量中的另一个名称重命名这个uplaod文件名 string strRoleValue ddlrole SelectedValue strin
  • 如何分配Profile值?

    我不知道我缺少什么 但我在 Web config 文件中添加了 Profile 属性 但无法访问 Profile Item在代码中或创建一个新的配置文件 我今天也遇到了同样的问题 学到了很多东西 Visual Studio 中有两种项目 网
  • 这段代码有什么问题。如果用户选择或不选择复选框,为什么它仍然显示 MsgBox? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 无论我是否选择复选框 它仍然会给出
  • 从 Dropbox C# 下载文件[重复]

    这个问题在这里已经有答案了 我正在尝试下载 Dropbox 中的 pdf 文件 我需要将其保存到本地计算机中 可以是任何文件夹C Users User Desktop例如 这是我一直在使用的代码 public void DownloadPd
  • 是否有稳定的 ASP.NET 博客控件(设计用于集成到现有站点中)? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我看到了 dotnetblogengine net 并从论坛帖子中得到的印象是 将其集成到现有网站中并
  • Jquery Ajax 调用返回 403 状态

    我有一个 jquery Ajax 调用来实现会话的 keepalive 这个 keepAlive 方法将每 20 分钟调用一次 function keepAlive ajax type POST url KeepAliveDummy asp
  • Asp.net 动态验证器在 Chrome 或 Safari 中不起作用

    好的 我正在动态创建 Asp net 验证控件并将它们插入到更新面板中 验证在 IE 和 Firefox 中有效 但在 Chrome 或 Safari 中无效 这是 aspx 文件 不要问我为什么不使用按钮服务器控件
  • Page.AsyncTimeout - 无休止的超时?

    I saw 一个例子 http www webreference com programming javascript rg30 index html of forever iframe实现 彗星模拟 所以我决定测试它 但添加了异步方法 这
  • OpenXML - 保护所有工作表

    我只能保护一张工作表 但是当我尝试保护 Excel 文档中的所有工作表时 我在尝试附加 SheetProtection 时收到错误 如果我理解正确 我必须在 SheetData 之后附加 SheetProtection 这是我的代码 She
  • Membership.ValidateUser() 的目的是什么

    我一直在学习有关MembershipProvider类 我认为Membership ValidateUser 方法应该用于登录用户 然而我刚刚了解到有一个FormsAuthentication Authenticate 目的是什么Valid
  • 报告服务报告超时

    我们有一份 2005 年的报告 可能有 2 到 250 页左右 平均约为 10 页 在开发报告时 我们的开发人员被告知 10 页左右是正确的数字 而且在不了解业务领域的情况下他认为报告服务是正确的方法 现在报告已部署到 PROD 我们收到了
  • ASP.NET MVC 防伪造令牌不安全

    在没有 ssl 的情况下向服务器发出请求时 我实际上可以看到 MVC3 框架以纯文本形式生成的验证令牌密钥 该密钥存储在名为 RequestVerificationToken Lw 的 cookie 中 在混合安全环境中 实际上可以在向非
  • 与简单的文件请求相比,您预计 Web 服务请求的响应时间开销是多少?

    我正在开发一个 asp net Web 服务应用程序 以向使用 jQuery ajax 发出请求的小部件提供 json 格式的数据 我一直在使用 FireBug Net 视图来检查数据请求需要多长时间 在我最初的原型中 我只是请求静态 js
  • 如何以编程方式设置单元格颜色 epplus?

    我想知道是否可以使用 epplus 以编程方式设置单元格颜色 我从 sql 存储过程加载数据并且运行良好 但我的用户想要 包含 年假 一词的单元格的背景颜色为浅黄色 而不是默认的白色 有没有办法做到这一点 也许通过迭代数据表 下面是哪里 p
  • 带有服务总线的 SignalR Azure 云服务

    我使用 SignalR 构建了一个简单的聊天应用程序那里有教程 http www asp net signalr overview getting started tutorial getting started with signalr
  • asp.net cookie、身份验证和会话超时

    我有一个使用表单身份验证的 asp net 网站 我在会话中保留一些信息 例如用户名 用户 ID 电子邮件等 我通过在身份验证 cookie 上设置较长的到期日期来允许用户保持登录网站的状态 因此 当用户仍处于身份验证状态时 会话过期的情况

随机推荐

  • GZIP压缩级别对解压有影响吗

    据我了解 GZIP 是 LZ77 和 Huffman 编码的组合 可以配置 1 9 之间的级别 其中 1 表示最快的压缩 较少压缩 9 表示最慢的压缩方法 最佳压缩 我的问题是 级别的选择only影响压缩过程 或者根据用于压缩的级别 解压缩
  • 角度测试随机中断:“未捕获类型错误:您在预期流的位置提供了‘未定义’。”

    我们有一个中等大小的 Angular 应用程序 目前约有 700 个单元测试 几周前 完美的测试开始出现问题 更奇怪的是 运行测试两次可能会产生不同的结果 即不同的测试可能会失败 在控制台中 我们总是发现错误 未捕获的类型错误 您在需要流的
  • PHP,在类属性上调用静态方法

    我希望将对象存储为类的属性 然后我希望能够通过直接引用该属性来调用该类的静态方法 考虑以下 class myModel public static function all return 1 class myClass public mod
  • 无法在 Visual Studio 2022 上热重加载

    我将我的 Web 应用程序从 Visual Studio 2019 移至 2022 预览版 7 但我无法热重载 即使是很小的更改 例如更改 if a b to if a b 并且需要停止调试器 并且我不确定 COMPLUS ForceENC
  • 像音乐应用程序一样自定义 UISlider

    我构建了一个自定义滑块来显示音乐曲目播放的进度并允许在曲目内进行擦洗 两者都运行良好 但一旦停止拖动并且重新定位滑块 就会出现轻微的滞后 和跳跃的运动 Apple Music 应用程序滑块是无缝的 scrubberSlider Scrubb
  • 多维数组到 MVC 控制器

    我有以下控制器方法 public ActionResult Export string data string workbookName ExcelWorkbook workbook new ExcelWorkbook workbook A
  • 如果使用 Match_Constraints,嵌套约束布局不会显示

    我正在尝试在 Android 中创建一个嵌套的 ConstraintLayout 目标是在约束布局内左侧有一个图像 右侧有另一个约束布局 如下图所示 It correctly shows on the preview but inside
  • 在 Internet Explorer 中启用 SOCKS 4a/5

    出于匿名目的 我们希望使用不断变化的代理服务器 在搜索过程中 我们偶然发现了 TOR 项目 它非常适合正常浏览 但是我们还需要软件的代理 遗憾的是 这个第三方软件使用互联网浏览器作为基础 因此我们无法使用推荐的浏览器 更糟糕的是 IE 的代
  • bashrc if:表达式语法错误

    我编写了以下 bashrc bashrc Source global definitions if f etc bashrc then etc bashrc fi User specific aliases and functions fu
  • 更新了 SDK 版本,出现 ClassNotFoundException: android.support.v4.view.ViewPager

    当我在处理 Android 项目时 我发现 Logcat 很烦人 没有将滚动条保持在给定点 并了解到更新 SDK 版本会添加一个暂停按钮来解决此问题 我更新到 SDK 版本 17 现在遇到了一些以前没有的奇怪问题 我删除并添加了 andro
  • VB.Net:测试多个值是否相等?

    如何测试一行中多个值的相等性 基本上我想做 if val1 val2 val3 valN 但在 VB Net 中 If val1 valN AndAlso val2 valN AndAlso Then End If 当测试多个值时 这可能会
  • 如何在SD卡上创建私人文件夹

    我的应用程序用于安全目的 因此 从我的应用程序用户捕获的照片中 所有照片都存储在一个文件夹中 该文件夹不应从任何其他应用程序访问 并且当设备连接到计算机系统时不应授予访问权限 如果用户想查看这些图像 他应该只能从我的应用程序访问 根据这个g
  • 设置 UIView 的 self 背景颜色

    我正在尝试从自定义视图类的 m 内部执行此操作not从 XIB 加载 而是以编程方式加载 id initWithFrame CGRect frame self super initWithFrame frame if self Initia
  • 未找到 ${env.JAVA_HOME} - Ant

    在我的 build xml 文件中 我有以下几行
  • 在 MySQL 中正确实现超类型子类型

    下面是一个数据库图表 我试图在其中确定适当的设计 这里有一些注意事项 员工 经理与客户相关联 The partyid是一种在全球范围内代表一个人的方式 客户 员工 经理 需要一直向下传播吗 它应该是所有表中的主键还是仅代表个人的表中的主键
  • 无法解析方法 getMap()

    我试图让地图片段在我的应用程序中工作 但在尝试获取 GoogleMap 对象时仍然出现错误 FragmentWithMap java import android Manifest import android app Activity i
  • string::size_type 而不是 int

    const std string size type cols greeting size pad 2 2 Why string size type int应该可以工作 它包含数字 空头也能容纳数字 与签名字符一样 但这些类型都不能保证足够
  • 当委托构造函数抛出异常时,内存是否会自动回收?

    从此 当委托构造函数抛出异常时 析构函数是否被调用 https stackoverflow com q 17657761 14065 class X public X X int X throw std exception X double
  • 将 GitHub 文件(和更新)获取到 Ubuntu Web 服务器上

    我正在设置一个多用户 多服务器环境 所有开发人员都将使用 Git 并从 GitHub 等克隆各种存储库 在我控制的一个帐户中 现在 我如何将文件从 GitHub 获取到服务器 大约 5 个 首先 我正在考虑某种自动化方式将更新从 GutHu
  • SSRS 报告查看器 + ASP.NET 凭据 401 异常

    我在 SQL2005 报告服务器上保存了一份报告 我想返回该报告的渲染 PDF 我在使用本地 rdlc 文件时发现了这一点 我已经在博客上介绍过它 http www jarrettmeyer com 2009 09 reports in a