首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从C#运行有关JasperServer的报告

从C#运行有关JasperServer的报告
EN

Stack Overflow用户
提问于 2011-11-28 07:30:23
回答 2查看 11.3K关注 0票数 18

Jasper Reports是Crystal Reports的一个极好的开源替代品。它非常适合单页PDF页面,比如从信件和发票到多页报告。然而,它对.NET不是很友好,并且让C#/Mono与JasperServer很好地合作并不是很有成效。

有没有人有关于如何从C#运行JasperServer报告,以及如何使用SOAP请求附加XML的代码示例?它需要在单声道上工作,所以Microsoft.Web.Services2是不可能的。

我尝试着滚动我自己的soap请求。Jasper服务器似乎接受了它,但除了服务器500错误之外,我似乎无法得到任何响应。我还没有达到附加MTOM附件的程度。

代码语言:javascript
复制
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();
EN

回答 2

Stack Overflow用户

发布于 2011-12-06 23:12:04

Jasper给出了一个你已经找到的Web Services API,我想。对于使用XML的Web Services,当您将服务描述(WSDL)转换为使用该语言的服务存根时,可以通过任何语言访问它,比如本例中的C#。

在给定的链接上,可以找到Jasper报告wsdl文件的位置,在访问它们之后,您的任务是创建存根,这是对给定XML接口的代码级访问。对于Mono来说,根据this tutorial,这可以通过一个简单的命令行命令来完成,剩下的工作就是按照你想使用的方式来使用这段代码。

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

就这样!

票数 2
EN

Stack Overflow用户

发布于 2012-03-09 03:45:46

我遇到了同样的问题,不是在mono中,而是在Visual Studio中。我总是收到错误500。这是因为根据microsoft/mono代码,jasperserver的答案不是SOAP兼容的。ASP.NET需要一个文本/ xml结构,而jasperserver返回一个多部分结构,其中xml作为第一部分,报告作为附件放在第二部分。

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

补充: 2012-03-09使用REST解决问题,请参阅Get report from jasperserver using REST webservice and asp.net C#

顺便说一下,这在Mono中也是有效的!(我在Visual Studio中开发,但在Mono上部署)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8289965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档