尝试集成Java和SSRS 2012

尝试集成Java和SSRS 2012,java,sql-server,reporting-services,Java,Sql Server,Reporting Services,我正在尝试编写一个Java应用程序,它将显示来自SSRS2012的报告。我设置了web服务代理,并使用以下代码尝试登录到服务器: try { ReportExecutionServiceSoapStub service = getService(); System.out.println("ADP1N: Test.main, Checkpoint Bravo..."); service.logonUser("CAMPUSAD/<username>", "<

我正在尝试编写一个Java应用程序,它将显示来自SSRS2012的报告。我设置了web服务代理,并使用以下代码尝试登录到服务器:

try
{
    ReportExecutionServiceSoapStub service = getService();
    System.out.println("ADP1N: Test.main, Checkpoint Bravo...");
    service.logonUser("CAMPUSAD/<username>", "<password>", "");
} catch (Exception e)
{
    e.printStackTrace();
}
我的rsreportserver.config文件包含以下身份验证条目:


关
代理
真的

我不确定我在这里做错了什么。

没有看到方法“GetService()”是什么,并且您需要做一些事情来验证服务。首先,我想看看你是否可以在本地测试一些代码,如果你知道某个用户对这个网站有管理员权限的话。我已经编写了与ssr对话的代码,但只在C#NET中编写,但我对Java还不确定。现在,我知道有几种从SSR获取数据的方法:

  • 直接从Web服务查看URL即可: http://(servername)/ReportServer/Pages/ReportViewer.aspx(路径)&rs:Command=Render

  • 从web服务填充HTML表单对象。我与上述类似,但:

    <form id="ssrsform" action="(link above or similar)" method="post" target="_self" >
     .....(options and settings)....
    </form>
    
  • 您需要有一个代理类,或者web服务,如果您想走这条路,通常需要调用SSRS服务器。你需要得到认证。你需要确保你联系的是正确的地点,否则它就会挂断你的电话

    编辑5-3-13:

    在我所知道的2008、2008和2012版本(2005年从未使用过SSRS)中,大多数本机模式的托管报告解决方案上,您应该可以从下图所示的下拉列表中看到类似于“C”部分的内容。如果你说你的凭证在报告中,你应该能够修改它们,即使它们是托管的。SSRS的web服务与它的数据库联系,该数据库保存您的所有设置,您可以在部署后自由更改这些设置。这是我实际上非常喜欢SSR的一个方面,如果这是一个小的更改,您可以更改托管对象,而不必重新部署该对象。这个问题似乎是在提示您,在我所见过的任何情况下,当设置选项“由运行报告的用户提供的凭据”而不是存储凭据时,这都是默认行为

    但是,如果未设置其他设置,则可能无法查看这些设置。如果您只是一个浏览器,您没有更改内容的权限。如果您没有看到设置,这是大多数问题,因为您无法设置它们。当您第一次设置SSRS时,最早的步骤之一是让默认管理员进入本地安装的web位置,并设置需要管理员访问的用户。通常,您进入站点设置,添加一个“系统管理员”,然后它的荣耀中的SSRS有另一个安全设置,用于实际遍历“文件夹设置”上的对象。您还需要设置这些安全设置。您需要确保您的代理帐户拥有“Content Manager”权限(如果您要求严格,则权限可能较小,因为Content Manager是最高的)。老实说,在我看来,SSRS的安全性是非常令人困惑的,也是许多人抱怨的一大来源,因此IMHO有理由这么说

    一般来说,权限继承树结构,如果您在名为“report1.rdl”的“reports”下发布报表,它通常是Home/reports/report1.rdl,并且您有权查看主文件夹、报表文件夹和报表对象。然而。。。管理员可以覆盖此链的任何部分并将其破坏。在我工作的那家公司,我继承了一个意大利面式的混乱局面,所有东西都是一次一个对象地设置的,因为他们没有正确地设置广告组,没有在组织单元结构中一次一个目录地做每件事。如果您非常了解TSQL,那么可以通过Sql management Studio直接从数据库结构中查询权限,对于DB和大多数对象所在的表,默认为“ReportServer”,我相信是CATALOG

    这是一张更好的解释图片,我的环境显示我相信是SSRS 2008R2,但2008年和2012年非常相似。

    如果从Windows 7调用报告,可能必须使用NTLM V2身份验证,如下所述。我们已经实现了相同的逻辑(只删除了日志),并且能够解决这个问题


    .

    我的jsp页面中确实有链接,这些链接引用了bullet#1中的报告。问题是,它随后要求登录。我正在试图找到一种自动登录的方法,因为最终报表门户将由我们的本地安全保护,我认为客户端不会希望登录两次。这很可能是由SSRS服务器处理的。当您直接转到链接时,您需要通过将数据源设置为引用设置的用户和密码,将数据源处理为自包含。你在这么做吗?还是设置为“使用Windows身份验证”?您可以在生成报表时选择“使用此名称和密码”,它们将引用连接字符串本身中包含的凭据。我不尝试验证数据源,这已在报表本身中处理。我想做的是绕过当我点击链接时出现的登录窗口。此链接位于用户将已经登录的应用程序中,我认为如果用户必须再次登录才能查看报表,他们会很恼火。如果我转到http://(servername)/(reportpath)它不需要身份验证,除非数据源未设置为在使用IE时使用嵌入式身份验证。否则,只会出现报告。您是否正在尝试使用IE以外的浏览器?我的建议是,由于这是所有与身份验证相关的,所以请尝试首先潜在地命中根节点。如果无法通过身份验证访问http://(servername)/ReportServer,则可能与未在站点上设置权限的用户有关。代码中的用户是否经过测试,可以在AD权限下手动访问站点?数据源密码存储在报告中。web应用程序位于不同的服务器上,无论我们使用什么浏览器
    <form id="ssrsform" action="(link above or similar)" method="post" target="_self" >
     .....(options and settings)....
    </form>
    
    ReportExecutionService rs = new ReportExecutionService();
    rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
    rs.Url = "http://myserver/reportserver/ReportExecution2005.asmx";