Jasper Reports 是 Crystal Reports 的绝佳开源替代品。它非常适合单页 PDF 页面,例如信件和发票到多页报告。然而,它对 .NET 不是很友好,并且让 C#/Mono 与 JasperServer 很好地配合并没有取得成果。
有没有人得到关于如何从 C# 在 JasperServer 上运行报告并将 XML 数据集附加到 SOAP 请求的任何代码示例?它需要在 Mono 上工作,所以 Microsoft.Web.Services2 是不可能的。
我试着推出我自己的 soap 请求。 Jasper Server 似乎接受了它,但除了服务器 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();
最佳答案
Jasper 给出了一个 Web Services API我想你已经找到了。作为使用 XML 的 Web 服务,当您将服务描述 (WSDL) 转换为该语言的服务 stub 时,可以通过任何语言访问它,例如本例中的 C#。
在给定的链接上可以找到 Jasper Reports wsdl 文件位置,在访问它们之后,您的任务是创建 stub ,这是对给定 XML 接口(interface)的代码级访问。对于 Mono,这可以根据 this tutorial 使用简单的命令行命令来完成。剩下的工作就是按照您想要的方式使用此代码。
可以通过这两个链接找到确切的命令,没有太多魔法,但它就像使用给定路径(例如 http://localhost:8080/jasperserver/services/repository?wsdl )运行 wsdl.exe
的一个命令一样简单参数,然后使用类似于 mcs/target:library SomeService.cs -r:System.Web.Services
的命令编译结果,将 SomeService.cs 替换为名称上一个命令的输出文件。
就是这样!
关于c# - 从 C# 在 JasperServer 上运行报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8289965/