2010-10-10 4 views
17

Ich möchte eine aC# -Klasse schreiben, die eine Verbindung zu einem Webservice unter www.temp.com erstellen würde, 2 String-Parameter an die Methode DoSomething senden und das String-Ergebnis erhalten . Ich möchte nicht wsdl verwenden. Da ich die Parameter des Webservice kenne, möchte ich nur einen einfachen Anruf tätigen.Wie kann ich einen Webservice von C# mit HTTP POST aufrufen

Ich denke, es sollte eine einfache und einfache Art und Weise sein, dass 2 in .net zu tun, aber ich konnte kein Beispiel nicht gefunden ...

+1

Ist das Ihr Web-Service? Können Sie einen REST-Service mit JSON oder einfachem XML anstelle von SOAP ausführen? – tvanfosson

+0

@tvanfosson Ja, es ist mein Webservice. Wie kann ich einen RESTful Webservice mit JSON machen? – Stavros

Antwort

20

Wenn dieses „webservice“ ist ein einfacher HTTP GET, können Sie verwenden WebRequest:

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

Von dort können Sie bei response.GetResponseStream für den Ausgang suchen. Sie können einen POST-Dienst auf die gleiche Weise treffen.

Wenn dies jedoch ein SOAP-Webservice ist, ist es nicht ganz so einfach. Abhängig von der Sicherheit und den Möglichkeiten des Webservice können Sie manchmal eine bereits erstellte Anfrage als Vorlage verwenden - ersetzen Sie die Parameterwerte und senden Sie sie (mit webrequest), dann parsen Sie die SOAP-Antwort manuell ... aber in diesem Fall Sie schauen auf viele zusätzliche Arbeit und können auch nur wsdl.exe verwenden, um Proxies zu generieren.

+1

Das sieht aus, als was ich brauche. Wie kann ich den Methodennamen (DoSomething) zu diesem Aufruf hinzufügen? – Stavros

+0

OK, nach einigem Herumspielen habe ich es geschafft, die zusätzlichen Sachen zu finden, die man braucht, um es mit Post zu machen. Danke, – Stavros

+0

wenn ich einige Zusatzdaten an den Webdienst übermitteln möchte, die ich anrufe, dann nehme ich an, das zu tun? – Madhav

10

Ich würde erkunden mit ASP.NET MVC für Ihren Web-Service. Sie können Parameter über die Standardformularparameter bereitstellen und das Ergebnis als JSON zurückgeben.

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

In Ihrem Client, verwenden Sie die 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; 

wo Sie

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

Danke für die Information, aber ich habe es bereits ohne Json implementiert. Nächstes Mal werde ich damit experimentieren. – Stavros

3

Eine andere Möglichkeit haben POST-Methode zu nennen, habe ich POST-Methode in WebAPI nennen.

  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

Sie können List-Objekt verwenden Newtonsoft.Json zurück:

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); 
Verwandte Themen