从c#运行JasperServer的报告

本文关键字:报告 JasperServer 运行 | 更新日期: 2023-09-27 18:15:49

Jasper Reports是Crystal Reports的一个极好的开源替代品。它适用于单页PDF页面,如信件&发票到多页报告。然而,它不是很。net友好,并且让c#/Mono与JasperServer很好地发挥作用并没有取得成果。

有没有人得到了如何从c#运行JasperServer上的报告的任何代码样本,并附加一个XML数据集与SOAP请求?它需要在Mono上工作,所以microsoft。web。

我试着卷我自己的肥皂请求。Jasper服务器似乎接受它,但我似乎不能得到任何响应,除了服务器500错误。我还没来得及附上MTOM附件。

var sb = new StringBuilder();
sb.AppendLine("<s:Envelope xmlns:s='"http://schemas.xmlsoap.org/soap/envelope/'">");
sb.AppendLine("<s:Body s:encodingStyle='"http://schemas.xmlsoap.org/soap/encoding/'" xmlns:xsi='"http://www.w3.org/2001/XMLSchema-instance'" xmlns:xsd='"http://www.w3.org/2001/XMLSchema'">");
sb.AppendLine("<q1:runReport xmlns:q1='"http://axis2.ws.jasperserver.jaspersoft.com'">");
sb.AppendLine("<requestXmlString xsi:type='"xsd:string'">");
sb.AppendLine("<request operationName='"runReport'" locale='"en'">");
sb.AppendLine("    <argument name='"RUN_OUTPUT_FORMAT'">PDF</argument>");
sb.AppendFormat("    <resourceDescriptor name='"'" wsType='"'" uriString='"{0}'" isNew='"false'">", "/JourneyReport");
sb.AppendLine("      <label>null</label>");
sb.AppendLine("      <parameter name='"testparam'">1</parameter>");
sb.AppendLine("    </resourceDescriptor>");
sb.AppendLine("  </request>");
sb.AppendLine("</requestXmlString>");
sb.AppendLine("</q1:runReport>");
sb.AppendLine("</s:Body></s:Envelope>");

var webRequest = (HttpWebRequest)WebRequest.Create("http://localhost:8080/jasperserver/services/repository");
webRequest.Credentials = new NetworkCredential("jasperadmin","jasperadmin");
webRequest.PreAuthenticate = true;
webRequest.Headers.Add("SOAPAction","");
//Set HttpWebRequest properties
byte[]  bytes = System.Text.Encoding.UTF8.GetBytes(sb.ToString());
webRequest.Method = "POST";
webRequest.ContentLength = bytes.Length;
webRequest.ContentType = "text/xml; encoding='utf-8'";
//Get Stream object 
var objRequestStream = webRequest.GetRequestStream();
objRequestStream.Write(bytes, 0, bytes.Length);
objRequestStream.Close();
var response = (HttpWebResponse)webRequest.GetResponse();

从c#运行JasperServer的报告

Jasper提供了一个Web服务API,我想你已经找到了。对于使用XML的Web服务,当您将服务描述(WSDL)转换为该语言的服务存根时,可以通过任何语言访问它,例如在这种情况下的c#。

在给定的链接上可以找到Jasper Reports wsdl文件位置,在访问它们之后,您的任务是创建存根,这是对给定XML接口的代码级访问。对于Mono,这可以根据本教程使用一个简单的命令行命令来完成,其余的工作就是使用这些代码,无论你想怎么使用它。

可以通过这两个链接找到确切的命令,不需要太多魔法,但是它就像在给定路径下运行wsdl.exe一样简单(例如。http://localhost:8080/jasperserver/services/repository?wsdl)作为参数,然后使用类似于mcs /target:library SomeService.cs -r:System.Web.Services的命令编译结果,其中您将SomeService.cs替换为前一个命令输出的文件名。

就是这样!

我遇到了同样的问题,而不是在单声道,但使用Visual Studio。我总是得到错误500。这是因为根据microsoft/mono代码,jasperserver的答案不是SOAP兼容的。ASP。. NET期望一个text/xml结构,jasperserver返回一个多部分结构,xml作为第一部分,报告作为附件在第二部分。

ASP。NET给出了一个例外。我现在正尝试使用REST做类似的事情,但到目前为止还没有成功。

添加:2012-03-09使用REST,参见使用REST webservice和asp.net c#从jasperserver获取报告

顺便说一下,这也是在Mono工作!(我在Visual Studio开发,但部署在Mono)