从C#运行JasperServer报告

Jasper Reports是Crystal Reports的绝佳开源替代品。 这对于单页PDF页面非常有用,例如字母和发票到多页报告。 然而,它不是非常友好的.NET,并且让C#/ Mono与JasperServer玩得很好并不富有成效。

有没有人从C#获得有关如何在JasperServer上运行报告的代码示例,并附加带有SOAP请求的XML数据集? 它需要在Mono上运行,因此Microsoft.Web.Services2是不可能的。

我试图推出自己的肥皂要求。 Jasper Server似乎接受了它,但我似乎无法获得除服务器500错误之外的任何响应。 我没有附加一个MTOM附件。

var sb = new StringBuilder(); sb.AppendLine(""); sb.AppendLine(""); sb.AppendLine(""); sb.AppendLine(""); sb.AppendLine(""); sb.AppendLine(" PDF"); sb.AppendFormat(" ", "/JourneyReport"); sb.AppendLine(" "); sb.AppendLine(" 1"); sb.AppendLine(" "); sb.AppendLine(" "); sb.AppendLine(""); sb.AppendLine(""); sb.AppendLine(""); 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服务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的命令编译结果mcs /target:library SomeService.cs -r:System.Web.Services ,其中将SomeService.cs替换为作为上一个命令输出的文件的名称。

而已!

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

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

增加:2012-03-09使用REST计算出来,请参阅使用REST webservice和asp.net C#从jasperserver获取报告

顺便说一句,那也是Mono的工作! (我在Visual Studio中开发,但在Mono上部署)