下载SSRS报告并保存在特定位置(C#)(未经授权)

Cre*_*er7 3 c# reporting-services ssrs-2012

我试图通过其URL将SSRS报告下载到数据缓冲区(字节数组)中,因此可以将其保存在特定的文件夹中,并选择其名称。如果需要,我愿意提出不同方法的建议。

问题

但是,无论输入什么凭据,我都会不断收到以下错误(401)未经授权

System.dll中发生类型'System.Net.WebException'的异常,但未在用户代码中处理

附加信息:远程服务器返回错误:(401)未经授权。

我正在使用此代码(C#):

WebClient myWebClient = new WebClient();
NetworkCredential netCredential = new NetworkCredential("username", "password");
myWebClient.Credentials = netCredential;

var theURL = "http://ReportServer/ReportServer_MYSERVER/Pages/ReportViewer.aspx?%2fPurchaseOrder&rs:Command=Render&OrderID=100&rs:ClearSession=true&rs:Format=PDF"

byte[] myDataBuffer = myWebClient.DownloadData(theURL);
Run Code Online (Sandbox Code Playgroud)

示例网址(如果我将下面的网址简单地复制到浏览器中,则可以完美地下载文件,无论访问情况如何): http://ReportServer/ReportServer_MYSERVER/Pages/ReportViewer.aspx?%2fPurchaseOrder&rs:Command=Render&OrderID=100&rs:ClearSession=true&rs:Format=PDF

我的机器在域上,我已经尝试了这些凭据,域以及数据库SA帐户,但是两者都存在相同的问题。

我知道此代码在下载PDF文件时有效,因为我从互联网上对一个随机URL进行了硬编码,并且可以正常工作,例如:“ http://www.axmag.com/download/pdfurl-guide.pdf

谢谢大家在此问题上的帮助,我希望这是可能的,因为这将对我的应用程序非常方便

Cre*_*er7 7

事实证明,这对于我的情况是如此简单(使用默认凭据):

var theURL = "http://ReportServer/ReportServer_MYSERVER/Pages/ReportViewer.aspx?%2fPurchaseOrder&rs:Command=Render&OrderID=100&rs:ClearSession=true&rs:Format=PDF";

WebClient Client = new WebClient();
Client.UseDefaultCredentials = true;

byte[] myDataBuffer = Client.DownloadData(theURL);
Run Code Online (Sandbox Code Playgroud)

上面的代码使所有SSRS报告都可以作为字节数组下载。然后,这意味着可以使用您选择的名称将其保存在指定的位置:

var filename = "Test.PDF";
var fileStructureLocal = "C:\\Test";
var fileStructureNetwork = "\\\\NetworkDrive\TestFolder";

var fileLocation = fileStructureNetwork + "\\" + filename;

 if (System.IO.File.Exists(url) == true)
        {
            //DO NOTHING
        }
 else
        {
            System.IO.File.WriteAllBytes(url, myDataBuffer);
            //SAVE FILE HERE
        }
Run Code Online (Sandbox Code Playgroud)

下一个块是如何重命名文件并指定位置。我还添加了一个检查,看它是否已经存在,如果执行了,它什么也不做。

我希望这会有所帮助,因为这是我长期努力的目标!