1

SSRS 2012 からのレポートを表示する Java アプリケーションを作成しようとしています。Web サービス プロキシをセットアップし、次のコードを使用してサーバーにログインしようとしています。

try
{
    ReportExecutionServiceSoapStub service = getService();
    System.out.println("ADP1N: Test.main, Checkpoint Bravo...");
    service.logonUser("CAMPUSAD/<username>", "<password>", "");
} catch (Exception e)
{
    e.printStackTrace();
}

しかし、私はこのエラーを受け取り続けます:

Apr 29, 2013 3:29:32 PM org.apache.commons.httpclient.HttpMethodDirector authenticate
SEVERE: Credentials cannot be used for NTLM authentication:         org.apache.commons.httpclient.UsernamePasswordCredentials
org.apache.commons.httpclient.auth.InvalidCredentialsException: Credentials cannot be used for NTLM authentication: org.apache.commons.httpclient.UsernamePasswordCredentials
at org.apache.commons.httpclient.auth.NTLMScheme.authenticate(NTLMScheme.java:331)
at org.apache.commons.httpclient.HttpMethodDirector.authenticateHost(HttpMethodDirector.java:281)
at org.apache.commons.httpclient.HttpMethodDirector.authenticate(HttpMethodDirector.java:233)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:169)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
at org.apache.axis.transport.http.CommonsHTTPSender.invoke(CommonsHTTPSender.java:196)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.ReportExecutionServiceSoapStub.logonUser(ReportExecutionServiceSoapStub.java:1893)
at Test.main(Test.java:29)
Apr 29, 2013 3:29:32 PM org.apache.commons.httpclient.HttpMethodDirector processWWWAuthChallenge
INFO: Failure authenticating with NTLM <any realm>@ais-fgnk3k1:80
AxisFault
 faultCode: {http://xml.apache.org/axis/}HTTP
 faultSubcode: 
 faultString: (401)Unauthorized
 faultActor: 
 faultNode: 
 faultDetail: 
    {}:return code:  401

    {http://xml.apache.org/axis/}HttpErrorCode:401

(401)Unauthorized
    at org.apache.axis.transport.http.CommonsHTTPSender.invoke(CommonsHTTPSender.java:218)
    at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
    at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
    at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
    at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
    at org.apache.axis.client.Call.invoke(Call.java:2767)
    at org.apache.axis.client.Call.invoke(Call.java:2443)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)
    at com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.ReportExecutionServiceSoapStub.logonUser(ReportExecutionServiceSoapStub.java:1893)
    at Test.main(Test.java:29)

私もこのコードを試してみましたが、同じ結果が得られました:

ExecutionInfo info = service.loadReport("http://usys-dbd1.dev.ais.msu.edu/ReportServer/Pages/ReportViewer.aspx?%2fUSYS%2fAdvisor+Scheduling%2fAdvisor_Scheduling_Report&amp;rs:Command=Render", null);

私の rsreportserver.config ファイルには、次の認証エントリがあります。

<Authentication>
    <AuthenticationTypes>
         <RSWindowsNegotiate />
         <RSWindowsKerberos />
         <RSWindowsNTLM />
    </AuthenticationTypes>
    <RSWindowsExtendedProtectionLevel>Off</RSWindowsExtendedProtectionLevel>
    <RSWindowsExtendedProtectionScenario>Proxy</RSWindowsExtendedProtectionScenario>
    <EnableAuthPersistence>true</EnableAuthPersistence>
</Authentication>

ここで何が間違っているのかわかりません。

4

2 に答える 2

1

「GetService()」メソッドが何であるか、およびサービスに対して認証するために必要なことがいくつかあることを確認せずに。まず、問題のサイトに対する管理者権限を持っていることがわかっているユーザーを使用して、ローカルで少しのコードをテストできるかどうかを確認します。私は SSRS と対話するコードを作成しましたが、C# .NET でのみ作成しましたが、Java についてはよくわかりません。SSRS から伝統的にデータを取得する方法をいくつか知っています。

  1. Web サービスから URL を直接表示するだけです: http:// (サーバー名)/ReportServer/Pages/ReportViewer.aspx(パス)&rs:Command=Render

  2. Web サービスから HTML フォーム オブジェクトを生成します。上記と同様ですが、次の点が異なります。

    <form id="ssrsform" action="(link above or similar)" method="post" target="_self" >
     .....(options and settings)....
    </form>
    
  3. 「レポート」コントロールを持つ .NET プロジェクトを作成すると、オプションの下にローカル レポートを表示する代わりに、SSRS サーバーに直接接続できます。

  4. サーバー RDL オブジェクトの作成をプロキシ クラスからのコードで完全に行います。ここに別のスレッドがありました。C# と .NET でそれを行う方法について、Programmatically Export SSRS report from sharepoint using ReportService2010.asmxを参照してください。一部は Java に適用される場合があります。しかし、私は確信が持てません。重要な部分は、この上部をテストすることです。

    ReportExecutionService rs = new ReportExecutionService();
    rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
    rs.Url = "http://myserver/reportserver/ReportExecution2005.asmx";
    

通常、SSRS サーバーを呼び出すには、プロキシ クラス、またはそのルートに移動する場合は Web サービスが必要です。認証を受ける必要があります。正しいポイントに連絡していることを確認する必要があります。そうしないと、ハングアップしてしまいます。

編集 5-3-13:

バージョン 2008、2008 R2、2012 (2005 で SSRS を使用したことはありません) で私が知っているネイティブ モードのほとんどのホストされたレポート ソリューションでは、下の図に示すドロップダウンからセクション 'C' に以下のようなものが表示されるはずです。資格情報がレポートに含まれていると言う場合は、ホストされた後でも変更できるはずです。SSRS の Web サービスは、すべての設定を保持するデータベースに接続し、デプロイ後に自由に変更できます。これは、SSRS について私が実際に気に入っている点の 1 つです。小さな変更であれば、ホストされているオブジェクトを変更でき、オブジェクトを再デプロイする必要はありません。この問題は、プロンプトが表示されているように見えます。これは、オプション「レポートを実行しているユーザーによって提供された資格情報」が設定され、資格情報が保存されていない場合のデフォルトの動作です。

ただし、別の設定が設定されていない場合、これらの設定を表示できない場合があります。あなたが単なるブラウザである場合、物事を変更する権利はありません。設定が表示されない場合は、設定できないため、それが問題の大部分です。SSRS を初めてセットアップするときの最初のステップの 1 つは、既定の管理者がローカル インストールの Web の場所にアクセスし、管理者アクセスが必要なユーザーをセットアップすることです。通常、サイト設定に移動し、「システム管理者」を追加すると、栄光のSSRSには、「フォルダー設定」でオブジェクトを実際にトラバーシンするための別のセキュリティ設定があります。これらのセキュリティ設定も設定する必要があります。プロキシ アカウントに「コンテンツ マネージャー」権限があることを確認する必要があります (厳格な場合は、コンテンツ マネージャーが最も権限が低くなる可能性があります)。正直SSRSの

一般的に言えば、権限はツリー構造を継承し、「report1.rdl」という名前の「レポート」の下にレポートを公開する場合、通常はホーム/レポート/レポート 1.rdl であり、ホーム フォルダー、レポート フォルダー、およびレポート フォルダーを表示する権限があります。レポート オブジェクト。ただし...管理者である誰かが、このチェーンの任意の部分をオーバーライドして、それを壊すことができます。私が働いている会社では、ADグループを正しく設定せず、組織単位構造で一度に1つのディレクトリですべてを行うため、すべてが一度に1つのオブジェクトに設定された場所を継承したスパゲッティ混乱です。TSQL をよく知っている場合は、Sql management Studio によってデータベース構造から直接権限を照会できます。デフォルトは DB の「ReportServer」であり、ほとんどのオブジェクトが含まれているテーブルは CATALOG であると考えられます。

これはより良い説明のための写真です。私の環境は SSRS 2008R2 であると信じていますが、2008 と 2012 は非常に似ています。 ここに画像の説明を入力

于 2013-04-29T20:29:18.153 に答える
1

Windows 7 からレポートを呼び出す場合は、以下で説明するように NTLM V2 認証を使用する必要がある場合があります。同じロジックを実装し (ログのみを削除)、問題を解決することができました。

http://devsac.blogspot.com/2010/10/supoprt-for-ntlmv2-with-apache.html .

于 2014-10-04T21:10:27.540 に答える