Rapport d'exécution sur JasperServer de C#
Jasper Reports est une superbe alternative libre aux Crystal Reports. Il est idéal pour les pages PDF une page comme des lettres et des factures à des rapports de plusieurs pages. Cependant ce N'est pas très.net friendly, et obtenir C#/Mono pour jouer nice avec JasperServer n'a pas été fructueux.
quelqu'un a-t-il des exemples de code sur la façon d'exécuter un rapport sur JasperServer à partir de C#, et de joindre un ensemble de données XML avec la demande SOAP? Il doit fonctionner sur Mono, donc Microsoft.Web.Services 2 est hors de la question.
j'ai essayé de lancer ma propre demande de savon. Jasper Server semble l'accepter, mais je ne peux pas sembler obtenir réponse autre qu'une erreur serveur 500. Je n'ai pas été aussi loin que d'attacher un accessoire 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();
2 réponses
Jasper donne un API services Web que vous avez déjà trouvé, je suppose. Pour ce qui est des Services web utilisant XML, il est possible d'y accéder à travers n'importe quelle langue, comme C# dans ce cas, lorsque vous convertissez la description de service (WSDL) en un raccourci de service sur cette langue.
sur ce lien donné, il est possible de trouver L'emplacement des fichiers WSDL de Jasper Reports et après y avoir eu accès, Votre tâche est de créer le talon, qui est un accès au niveau du code à l'interface XML donnée. Pour le Mono cela peut être fait avec une commande en ligne de commande simple selon ce tutoriel et le reste de l'ouvrage est d'utiliser ce code comment jamais vous voulez l'utiliser.
la commande exacte peut être trouvée à travers ces deux liens avec peu de magie, mais c'est quelque chose d'aussi facile qu'une commande en cours d'exécution wsdl.exe
avec le chemin donné (par exemple. http://localhost:8080/jasperserver/services/repository?wsdl) comme argument et puis compiler le résultat avec une commande similaire mcs /target:library SomeService.cs -r:System.Web.Services
où vous remplacez SomeService.cs avec le nom du fichier qui était la sortie de la commande précédente.
C'est elle!
j'ai rencontré le même problème non pas en mono mais en utilisant Visual Studio. J'ai toujours 500 erreurs. C'est parce que la réponse de jasperserver selon le code microsoft/mono n'est pas soap complient. ASP.NET s'attend à une structure texte/xml, et jasperserver renvoie une structure multipartie avec le xml comme première partie et le rapport comme pièce jointe dans la deuxième partie.
ASP.NET il y a une exception. J'essaie maintenant de faire une chose similaire en utilisant le repos, mais je n'ai pas réussi jusqu'à présent.
Ajout: 2012-03-09 Trouvé en utilisant le repos, voir obtenir le rapport de jasperserver en utilisant REST webservice et asp.net C#
au fait, ça marche aussi en Mono! (Je développe sous Visual Studio, mais déployer sur Mono)