2

正常に動作しているように見えるレポートがありますが、それを asp.net MVC アプリケーションでダウンロードしようとすると、500 が返されます。単に URL アクセスを使用してレポートの PDF バージョンをダウンロードしようとしています。これを行うには、次のことを行います。

WebClient client = new WebClient();
NetworkCredential nwc = new NetworkCredential(ConfigurationManager.AppSettings["SSRSUserName"], ConfigurationManager.AppSettings["SSRSPassword"]);
client.Credentials = nwc;
string paramList = "&OrderId=" + orderId;

string reportURL = ConfigurationManager.AppSettings["SSRSBaseUrl"] +
            ConfigurationManager.AppSettings["SSRSReport"] + 
            "&rs:Command=Render&rs:Format=PDF" +
            paramList;
try 
{
     byte[] reportBytes = client.DownloadData(reportURL);
}

レポートが正常に機能することを確認するために、結果として得られた reportURL 文字列を取得してブラウザーに投げると、レポートが完全にダウンロードされたことを確認できました。

私のアプリケーションで 500 を取得する理由を知っている人はいますか? 私が見逃している設定はありますか?

サーバーのバージョンは SQL Server 2016 です

4

1 に答える 1

2

UseDefaultCredentials = true説明と解決策を要約すると、WebClient解決済みの一般的な 500 内部サーバー エラーのプロパティを設定して、既定の資格情報を使用します。

インストールは SQL Server 2008 以降であるため、認証要求は Reporting Services インスタンスによって内部的に処理されます。

Reporting Services の以前のバージョンでは、すべての認証サポートは IIS によって提供されていました。SQL Server 2008 リリース以降、IIS は使用されなくなりました。Reporting Services は、すべての認証要求を内部的に処理します。

デフォルトでは、Reports Server は Windows 統合認証に依存する認証方法を使用します

この場合のReports Serverは、ネゴシエート、NTLMおよびKerberosの認証方法の1つまたはすべてを使用しており、これはASP.NETアプリケーションではないため、DefaultCredentialsで説明されているように、デフォルトの資格証明を使用する必要があります:

DefaultCredentials プロパティは、NTLM、ネゴシエート、および Kerberos ベースの認証にのみ適用されます。

DefaultCredentials は、アプリケーションが実行されている現在のセキュリティ コンテキストのシステム資格情報を表します。クライアント側アプリケーションの場合、これらは通常、アプリケーションを実行しているユーザーの Windows 資格情報 (ユーザー名、パスワード、およびドメイン) です。ASP.NET アプリケーションの場合、既定の資格情報は、ログインしているユーザーまたは偽装されているユーザーのユーザー資格情報です。

これが、ブラウザでは URL を介して Report Viewer にアクセスできても、アプリケーションではアクセスできなかった理由です。

于 2016-08-18T16:39:19.467 に答える