2010-10-10 8 views
17

के साथ सी # से एक webservice कैसे कॉल कर सकता हूं मैं एसी # कक्षा लिखना चाहता हूं जो www.temp.com पर चलने वाली किसी webservice से कनेक्शन बनाएगा, विधि को दो स्ट्रिंग पैरा भेजें और कुछ स्ट्रिंग परिणाम प्राप्त करें । मैं wsdl का उपयोग नहीं करना चाहता। चूंकि मैं webservice के पैराम को जानता हूं, इसलिए मैं बस एक साधारण कॉल करना चाहता हूं।मैं HTTP POST

मुझे लगता है कि ऐसा करने के लिए है कि नेट 2 में एक आसान और सरल तरीका होना चाहिए, लेकिन मैं किसी भी उदाहरण नहीं मिला ...

+1

यह आपके वेब सेवा है? क्या आप एसओएपी के बजाय जेएसओएन या सादे एक्सएमएल के साथ एक विश्वसनीय सेवा कर सकते हैं? – tvanfosson

+0

@tvanfosson हाँ, यह मेरी webservice है। मैं JSON के साथ एक विश्वसनीय webservice कैसे कर सकता हूं? – Stavros

उत्तर

20

यदि यह "वेब सेवा" एक सरल HTTP प्राप्त है, आप कर सकते हैं वहां से

WebRequest request = WebRequest.Create("http://www.temp.com/?param1=x&param2=y"); 
request.Method="GET"; 
WebResponse response = request.GetResponse(); 

आप उत्पादन के लिए response.GetResponseStream देख सकते हैं: WebRequest का उपयोग करें। आप एक पोस्ट सेवा उसी तरह हिट कर सकते हैं।

हालांकि, यदि यह एक SOAP webservice है, तो यह इतना आसान नहीं है। Webservice की सुरक्षा और विकल्पों के आधार पर, कभी-कभी आप पहले से ही गठित अनुरोध ले सकते हैं और इसे टेम्पलेट के रूप में उपयोग कर सकते हैं - param मानों को प्रतिस्थापित करें और इसे भेजें (वेबरेक्वेस्ट का उपयोग करके), फिर मैन्युअल रूप से SOAP प्रतिक्रिया पार्स करें ... लेकिन उस स्थिति में आप प्रॉक्सी उत्पन्न करने के लिए wsdl.exe का उपयोग कर सकते हैं और साथ ही बहुत सारे अतिरिक्त काम देख रहे हैं।

+1

ऐसा लगता है कि मुझे क्या चाहिए। मैं इस कॉल में विधि का नाम (DoSomething) कैसे जोड़ सकता हूं? – Stavros

+0

ठीक है, कुछ खेलने के बाद, मैं पोस्ट के साथ बनाने के लिए आवश्यक अतिरिक्त सामान ढूंढने में कामयाब रहा। धन्यवाद – Stavros

+0

अगर मैं वेब सेवा में कुछ अतिरिक्त डेटा जमा करना चाहता हूं, तो मुझे क्या लगता है कि मुझे ऐसा करने का अनुमान है? – Madhav

10

मैं आपकी वेब सेवा के लिए एएसपी.नेट एमवीसी का उपयोग करके पता लगाऊंगा। आप मानक फॉर्म पैरामीटर के माध्यम से पैरामीटर प्रदान कर सकते हैं और परिणाम जेएसओएन के रूप में वापस कर सकते हैं।

[HttpPost] 
public ActionResult MyPostAction(string foo, string bar) 
{ 
    ... 
    return Json(new { Value = "baz" }); 
} 

अपने ग्राहक में,, HttpWebRequest

var request = WebRequest.Create("/controller/mypostaction"); 
request.Method = "POST"; 
var data = string.Format("foo={0}&bar={1}", foo, bar); 
using (var writer = new StreamWriter(request.GetRequestStream())) 
{ 
    writer.WriteLine(data); 
} 
var response = request.GetResponse(); 
var serializer = new DataContractJsonSerializer(typeof(PostActionResult)); 
var result = serializer.ReadObject(response.GetResponseStream()) 
       as PostActionResult; 

जहां

public class PostActionResult 
{ 
    public string Value { get; set; } 
} 
+0

जानकारी के लिए धन्यवाद, लेकिन मैंने इसे पहले ही जेसन के बिना लागू कर दिया है। अगली बार मैं इसके साथ प्रयोग करूंगा। – Stavros

3

एक दूसरा रास्ता नहीं है POST विधि कॉल करने के लिए का उपयोग मैं वेबएपीआई में POST पद्धति कहते थे।

  WebClient wc = new WebClient(); 

      string result; 
      wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; 
      result = wc.UploadString("http://localhost:23369/MyController/PostMethodName/Param 1/Param 2",""); 

      Response.Write(result); 
1

आप सूची वस्तु उपयोग Newtonsoft.Json लौट सकते हैं:

WebClient wc = new WebClient(); 
    string result; 
    wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; 
    var data = string.Format("Value1={0}&Value2={1}&Value3={2}", "param1", "param2", "param3"); 
    result = wc.UploadString("http:your_services", data); 
    var ser = new JavaScriptSerializer(); 
    var people = ser.Deserialize<object_your[]>(result);