c# - 从 C# 在 JasperServer 上运行报告

标签 c# soap mono jasper-reports jasperserver

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/

相关文章:

java - Web服务连接超时和请求超时的区别

php - PayPal 快速结帐 SOAP - 版本错误

java - 表单提交后触发 SOAP

c# - Mono Assembly 未解决

.NET/Mono 安装基础

asp.net - Mono 和 IHttpHandler

c# - 使用 Web API Controller 解析传入的 JSON(来自 javascript Ajax post)

c# - Entity Framework : update user fails

c# - 我测量运行时间的方法有缺陷吗?

c# - 按钮 DialogResult 未被(重置?