【发布时间】:2011-11-27 23:30:23
【问题描述】:
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("<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();
【问题讨论】:
-
希望这篇文章对您有所帮助:stackoverflow.com/questions/4351511/…
-
谢谢,但它不适用于 Mono。我得看看能不能找到一个不同的 SOAP 库,或者手动做。
-
是否可以选择商业组件?
-
是的,如果价格合适的话。我确实看过使用 php 来做这件事,但我也遇到了困难。见stackoverflow.com/questions/8418261/…
-
我已经让 REST 工作了!请参阅 [使用 REST webservice 和 asp.net C# 从 jasperserver 获取报告][1] [1]:stackoverflow.com/questions/9623685/…
标签: c# soap mono jasper-reports jasperserver