2011-11-27 1 views
17

Jasper Reportsは、Crystal Reportsの優れたオープンソースです。複数ページのレポートに対する請求書&のような単一ページのPDFページには最適です。しかし、それはあまり.NETに優しいわけではなく、C#/ MonoをJasperServerでうまくプレイさせることは実りありませんでした。C#のJasperServerに関するレポートの実行

C#のJasperServerでレポートを実行する方法のコードサンプルがありますか?SOAPリクエストでXMLデータセットを添付しますか? Monoで作業する必要があるので、Microsoft.Web.Services2は問題ありません。

私は自分の石鹸の要求を巻き起こそうとしていました。ジャスパー・サーバーはそれを受け入れているようだが、サーバー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(); 
+0

この投稿はあなたに役立ちます:http://stackoverflow.com/questions/4351511/upload-report-unit-via-webservice-in-c-sharp-net 〜to-jasperserver –

+0

ありがとう、しかし、それはモノ上で動作しません。私は、別のSOAPライブラリを見つけることができるかどうか、または手動で行う必要があります。 – FlappySocks

+0

はオプションの商用コンポーネントですか? – Yahia

答えて

2

ジャスパーはあなたがすでに見つけた​​を与えます。 XMLを使用するWebサービスであるためには、サービス記述(WSDL)をその言語のサービススタブに変換するときに、この場合はC#などの任意の言語でアクセスできます。

このリンクには、Jasper Reports wsdlファイルの場所があり、そこにアクセスした後に、指定されたXMLインターフェイスへのコードレベルのアクセスであるスタブを作成することができます。 Monoの場合、これはthis tutorialに従った単純なコマンドラインコマンドで行うことができ、残りの作業はこのコードをどのように使いたいかを使用することです。

正確なコマンドは、あまり魔法ではないこれらの2つのリンクで見つけることができますが、特定のパス(例:http://localhost:8080/jasperserver/services/repository?wsdl)を引数として使用してwsdl.exeを実行し、 mcs /target:library SomeService.cs -r:System.Web.Servicesに変更します。SomeService.csを、前のコマンドの出力であったファイルの名前に置き換えます。

これだけです!

+0

どのようにXMLデータソースの添付ファイルを追加しますか? XML SOAP要求があり、レポートのXMLデータである添付ファイルがあります – FlappySocks

0

モノではなくVisual Studioを使用して同じ問題が発生しました。私はいつもエラー500を取得します。これは、microsoft/monoコードに従ったjasperserverの答えがSOAPコンプリントではないためです。 ASP.NETはtext/xml構造体を必要とし、jasperserverはxmlを最初の部分として、レポートを2番目の部分として添付してマルチパート構造を返します。

ASP.NETでは例外があります。私は今、RESTを使って同様のことをしようとしていますが、これまで成功していません。

追加:2012-03-09 はRESTを使用して考え出した、また、モノラルで動作していること、ところでGet report from jasperserver using REST webservice and asp.net C#

を参照してください! (私はVisual Studioで開発しますが、Monoにデプロイします)

関連する問題