2010-06-04 11 views
5

में प्रोग्रामेटिक रूप से वेबमाइड्स को कॉल करें, मैं एक ऐसा फ़ंक्शन लिखने की कोशिश कर रहा हूं जो वेबसाइव से वेबमाइडर को विधि का नाम और webservice के URL को कॉल कर सकता है। मुझे एक ब्लॉग पर कुछ कोड मिला है जो एक विवरण को छोड़कर यह ठीक है। यह आवश्यक है कि अनुरोध एक्सएमएल भी प्रदान किया जाए। यहां लक्ष्य वेबस्क्रिप्ट से अनुरोध XML टेम्पलेट प्राप्त करना है। मुझे यकीन है कि यह किसी भी तरह से संभव है क्योंकि मैं अपने ब्राउज़र में एक webservice के यूआरएल तक पहुंचने के लिए अनुरोध और प्रतिक्रिया एक्सएमएल टेम्पलेट्स दोनों देख सकता हूं।सी #

XmlDocument doc = new XmlDocument(); 
//this is the problem. I need to get this automatically 
doc.Load("../../request.xml"); 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost/dummyws/dummyws.asmx?op=HelloWorld"); 
req.ContentType = "text/xml;charset=\"utf-8\""; 
req.Accept = "text/xml"; 
req.Method = "POST"; 
Stream stm = req.GetRequestStream(); 
doc.Save(stm); 
stm.Close(); 
WebResponse resp = req.GetResponse(); 
stm = resp.GetResponseStream(); 
StreamReader r = new StreamReader(stm); 
Console.WriteLine(r.ReadToEnd()); 
+0

यदि आप इस बारे में नहीं जानते कि इसके लिए कौन से पैरामीटर की आवश्यकता है, तो आप एक विधि (वेब ​​सेवा या अन्यथा) कैसे कॉल कर सकते हैं? –

+0

आइए अब मान लें कि इन वेबमाइड्स को किसी भी पैरामीटर की आवश्यकता नहीं है। – hancock

+0

क्या वेब सेवा डब्लूएसडीएल विवरण का पर्दाफाश करती है? – dariom

उत्तर

2

ऊपर टिप्पणियों से इसे जारी रखते हुए:

इस कोड को जो webmethod प्रोग्राम के रूप में कहता है। यदि आपके पास WSDL फ़ाइल है जो आपकी सेवा का वर्णन करती है तो आप इसे अपनी वेब सेवा के साथ संवाद करने के लिए आवश्यक जानकारी के रूप में उपयोग करते हैं।

अपनी सेवा प्रॉक्सी के साथ संवाद करने के लिए प्रॉक्सी क्लास का उपयोग करना HTTP और XML की अंतर्निहित नलसाजी से स्वयं को अमूर्त करने का एक आसान तरीका है।

रन-टाइम पर ऐसा करने के तरीके हैं - अनिवार्य रूप से उस कोड को उत्पन्न करना जो विजुअल स्टूडियो उत्पन्न करता है जब आप अपनी प्रोजेक्ट में वेब सेवा संदर्भ जोड़ते हैं।

मैंने एक समाधान का उपयोग किया है जो: this newsgroup question पर आधारित है, लेकिन other examples out there भी हैं।

+0

हाँ यह एक अच्छा दृष्टिकोण की तरह लगता है। जवाब के लिए धन्यवाद। – hancock

0

FYI, आपका कोड using ब्लॉक अनुपलब्ध है। यह इस तरह होना चाहिए:

XmlDocument doc = new XmlDocument(); 
//this is the problem. I need to get this automatically 
doc.Load("../../request.xml"); 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost/dummyws/dummyws.asmx?op=HelloWorld"); 
req.ContentType = "text/xml;charset=\"utf-8\""; 
req.Accept = "text/xml"; 
req.Method = "POST"; 

using (Stream reqstm = req.GetRequestStream()) 
{ 
    doc.Save(reqstm); 
} 

using (WebResponse resp = req.GetResponse()) 
{ 
    using (Stream respstm = resp.GetResponseStream()) 
    { 
     using (StreamReader r = new StreamReader(respstm)) 
     { 
      Console.WriteLine(r.ReadToEnd()); 
     }  
    } 
} 
+0

आप सही हैं, लेकिन मैंने डेरियम के समाधान का उपयोग किया जो कोड के उस टुकड़े को नियोजित नहीं करता है। – hancock