asp.net - 使用 REST webservice 和 asp.net C# 从 jasperserver 获取报告

标签 asp.net rest c#-2.0 jasperserver

您可以使用 jasperservers Web 服务(SOAP 和 REST 可用)从 Web 应用程序获取管理并运行报告。 SOAP wsdl 与 asp.net c# 不兼容(至少我无法让它工作),所以我决定使用 REST Web 服务。

我快到了,但我无法检索报告本身。有谁知道出了什么问题吗? 我在 Linux 上使用 jasperserver CE 4.5。

// Setup WebClient 
WebClient httpclient = new WebClient();

//Basic Auth
httpclient.Credentials = new NetworkCredential("NAME", "PASSWD");
httpclient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

// Build resourceDescriptor
string requestXml;
requestXml =  "<resourceDescriptor name="budget_overzicht_per_klant" wsType="reportUnit" uriString="/Declaraties/12change/Klant/budget_overzicht_per_klant"n";
requestXml += " isNew="false">n";
requestXml += "   <label>null</label>n";
requestXml += "   <parameter name="klantid">14</parameter>n";
requestXml += "   <parameter name="start">20120101</parameter>n";
requestXml += "   <parameter name="eind">20120302'</parameter>n";
requestXml += "   <parameter name="Titel">Test 123</parameter>n";
requestXml += "</resourceDescriptor>n";

// Send PUT
string requestAllResult = httpclient.UploadString("http://website/jasperserver/rest/report/Declaraties/12change/Klant/budget_overzicht_per_klant?RUN_OUTPUT_FORMAT=PDF", "PUT", requestXml);

// requestAllResult contains:
//<report>
//  <uuid>f521fe7d-7432-4c47-962c-9fec29bdaa43</uuid>
//  <originalUri>/Declaraties/12change/Klant/budget_overzicht_per_klant</originalUri>
//  <totalPages>4</totalPages>
//  <startPage>1</startPage>
//  <endPage>4</endPage>
//  <file type="application/pdf"><![CDATA[report]]></file>
//</report>
// You have to use the uuid to GET the file 'report'
//
// Extract uuid, filename is always report
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.LoadXml(requestAllResult);
XmlNode node = doc.DocumentElement.SelectSingleNode("uuid");
string uuid = node.InnerText;

//Build GET URL
string reportUrl = "http://website/jasperserver/rest/report/";
reportUrl += uuid;
reportUrl += "?file=report";

// the value of report Url is now 
// "http://website/jasperserver/rest/report/f521fe7d-7432-4c47-962c-9fec29bdaa43?file=report"

// Get report
string report;
report = httpclient.DownloadString(reportUrl);

// Exception, HTTP 404 ERROR????

该错误似乎意味着该 uuid 不在当前 session 中。有人能做到这一点吗?谢谢!

最佳答案

我会回答我自己的问题:

PUT 在响应 header 中返回一个 Cookie,您必须在后续的 GET 中使用它:

// Send PUT 
string requestAllResult = httpclient.UploadString("http://website/jasperserver/rest/report/Declaraties/12change/Klant/budget_overzicht_per_klant?RUN_OUTPUT_FORMAT=PDF", "PUT", requestXml);

// Get session cookie
string session = httpclient.ResponseHeaders.Get("Set-Cookie");
// Set session cookie
httpclient.Headers.Add("Cookie", session);

// Get report
report=httpclient.DownloadString("http://website/jasperserver/rest/report/f521fe7d-7432-4c47-962c-9fec29bdaa43?file=report");

就是这样!

关于asp.net - 使用 REST webservice 和 asp.net C# 从 jasperserver 获取报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9623685/

相关文章:

java - Jersey - 尽管非空初始化,资源变量仍为空值

c# - 可空类型和运算符

c# - 如何在 ASP.NET 应用程序中序列化异常?

django - 序列化器中的循环依赖

身份验证后 ASP.Net 重定向到本地主机

c# - SOAP 的 WSDL - REST 怎么样?

encryption - Compact Framework - 获取存储卡序列号

sql - 将 'IN' 运算符与 SQL 命令对象和 C# 2.0 一起使用

asp.net - 仅一个 URL 的 HTTP 到 HTTPS 重定向

c# - 如何删除未使用的命名空间