Jasper Reports es una excelente alternativa de código abierto para Crystal Reports. Es ideal para páginas PDF de una sola página, como cartas &, facturas para informes de varias páginas. Sin embargo, no es muy amigable con .NET, y hacer que C#/Mono juegue bien con JasperServer no ha sido fructífero.Ejecución de informe en JasperServer desde C#
¿Alguien ha obtenido ejemplos de código sobre cómo ejecutar un informe en JasperServer desde C# y adjunta un conjunto de datos XML con la solicitud SOAP? Tiene que funcionar en Mono, por lo que Microsoft.Web.Services2 está fuera de cuestión.
He intentado rodar mi propia solicitud de jabón. Jasper Server parece aceptarlo, pero parece que no puedo obtener ninguna respuesta que no sea un error del servidor 500. No llegué a adjuntar un archivo adjunto 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();
Puede que esta publicación lo ayude: http://stackoverflow.com/questions/4351511/upload-union-unit-via-webservice-in-c-sharp-net -to-jasperserver –
Gracias, pero no funcionará en Mono. Tendré que ver si puedo encontrar una biblioteca SOAP diferente, o hacerlo manualmente. – FlappySocks
es un componente comercial una opción? – Yahia