2011-11-27 18 views
17

से जैस्परसेवर पर चल रही रिपोर्ट क्रिस्टल रिपोर्ट्स के लिए एक शानदार ओपन सोर्स विकल्प है। बहु पृष्ठ रिपोर्टों के लिए अक्षरों & चालान जैसे एकल पृष्ठ पीडीएफ पृष्ठों के लिए यह बहुत अच्छा है। हालांकि यह बहुत ही अनुकूल नहीं है, और जेस्परसेवर के साथ अच्छा खेलने के लिए सी #/मोनो प्राप्त करना उपयोगी नहीं रहा है।सी #

क्या किसी को किसी भी कोड नमूने मिलते हैं कि कैसे JasperServer पर सी # से रिपोर्ट चलाने के लिए, और एसओएपी अनुरोध के साथ एक एक्सएमएल डेटासेट संलग्न करें? इसे मोनो पर काम करने की ज़रूरत है, इसलिए माइक्रोसॉफ्ट.Web.Services2 सवाल से बाहर है।

मुझे अपना साबुन अनुरोध रोल करने की कोशिश में जाना पड़ा। जैस्पर सर्वर इसे स्वीकार करता प्रतीत होता है, लेकिन मुझे लगता है कि सर्वर 500 त्रुटि के अलावा कोई प्रतिक्रिया नहीं मिलती है। मैं एमटीओएम लगाव को जोड़ने के रूप में नहीं मिला था।

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

धन्यवाद, लेकिन यह मोनो पर काम नहीं करेगा। मुझे यह देखना होगा कि क्या मुझे एक अलग एसओएपी लाइब्रेरी मिल सकती है, या इसे मैन्युअल रूप से करें। – FlappySocks

+0

एक वाणिज्यिक घटक है एक विकल्प? – Yahia

उत्तर

2

जैस्पर एक Web Services API जो आप पहले से ही पाया है देता है, मुझे लगता है। एक्सएमएल का उपयोग कर वेब सर्विसेज होने के लिए, इसे किसी भी भाषा के माध्यम से एक्सेस किया जा सकता है, जैसे सी # इस मामले में, जब आप सेवा विवरण (डब्लूएसडीएल) को उस भाषा पर एक सेवा स्टब में कनवर्ट करते हैं।

उस दिए गए लिंक पर जैस्पर रिपोर्ट्स wsdl फ़ाइल स्थानों को पाया जा सकता है और उन्हें एक्सेस करने के बाद आपका कार्य स्टब बनाना है, जो दिए गए XML इंटरफ़ेस तक कोड स्तर तक पहुंच है। मोनो के लिए यह this tutorial के अनुसार एक साधारण कमांड लाइन कमांड के साथ किया जा सकता है और बाकी का काम इस कोड का उपयोग करना है कि आप इसका उपयोग कैसे करना चाहते हैं।

सटीक कमांड इन दो लिंक के माध्यम से बहुत अधिक जादू के साथ नहीं पाया जा सकता है, लेकिन यह कुछ आसान है जैसे wsdl.exe दिए गए पथ (उदाहरण के लिए http://localhost:8080/jasperserver/services/repository?wsdl) तर्क के साथ और उसके बाद परिणाम को कमांड के साथ संकलित करना mcs /target:library SomeService.cs -r:System.Web.Services पर जहां आप कुछ Service.cs को उस फ़ाइल के नाम से प्रतिस्थापित करते हैं जो पिछले कमांड का आउटपुट था।

यही है!

+0

आप XML डेटा स्रोत अनुलग्नक को कैसे जोड़ते हैं? एक्सएमएल साबुन अनुरोध है, और एक अनुलग्नक जो रिपोर्ट के लिए एक्सएमएल डेटा है – FlappySocks

0

मैं मोनो में नहीं बल्कि विजुअल स्टूडियो का उपयोग कर एक ही समस्या में भाग गया। मुझे हमेशा त्रुटि 500 ​​मिलती है। ऐसा इसलिए है क्योंकि माइक्रोसॉफ्ट/मोनो कोड के अनुसार जसर्सरवर का जवाब SOAP अनुपालन नहीं है। एएसपी.नेट एक पाठ/एक्सएमएल संरचना की अपेक्षा करता है, और जैस्परसेवर पहले भाग के रूप में एक्सएमएल के साथ एक मल्टीपार्ट संरचना भेजता है और रिपोर्ट दूसरे भाग में अनुलग्नक के रूप में भेजता है।

एएसपी.नेट उस पर एक अपवाद देता है। अब मैं आरईएसटी का उपयोग कर एक समान काम करने की कोशिश कर रहा हूं, लेकिन मैं अब तक सफल नहीं हुआ हूं।

अलावा: 2012-03-09 बाकी का उपयोग कर पता लगा, देख Get report from jasperserver using REST webservice and asp.net C#

वैसे, वह भी मोनो में काम कर रहा है! (मैं विजुअल स्टूडियो में विकसित हूं, लेकिन मोनो पर तैनात)