2010-10-10 11 views
17

Chcę napisać klasę aC#, która utworzyłaby połączenie z usługą sieciową uruchomioną na stronie www.temp.com, wyślij 2 parametry ciągu do metody DoSomething i uzyskaj wynik ciągu . Nie chcę używać wsdl. Ponieważ znam params usługi internetowej, po prostu chcę wykonać proste połączenie.Jak mogę połączyć się z usługą sieciową z języka C# z protokołem HTTP POST

Chyba nie powinien być łatwy i prosty sposób, aby to zrobić w .NET 2, ale nie mogłem znaleźć żadnego przykładu ...

+1

Jest to serwis internetowy? Czy można wykonać usługę RESTful z JSON lub zwykłym XML zamiast SOAP? – tvanfosson

+0

@tvanfosson Tak, to moja usługa internetowa. Jak mogę wykonać RESTful webservice z JSON? – Stavros

Odpowiedz

20

Jeśli ta „usługa” to prosty HTTP GET, można używać WebRequest:

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

Stamtąd można spojrzeć na response.GetResponseStream na wyjściu. W ten sam sposób możesz trafić usługę POST.

Jeśli jednak jest to usługa internetowa SOAP, nie jest to takie proste. W zależności od zabezpieczeń i opcji usługi internetowej, czasami możesz wziąć już utworzone żądanie i użyć go jako szablonu - zastąp wartości parametrów i wyślij (za pomocą webwęzła), a następnie przeanalizuj odpowiedź SOAP ręcznie ... ale w takim przypadku patrzysz na mnóstwo dodatkowej pracy i możesz po prostu użyć wsdl.exe do wygenerowania serwerów proxy.

+1

To wygląda na to, czego potrzebuję. Jak mogę dodać nazwę metody (DoSomething) do tego połączenia? – Stavros

+0

OK, po kilku zabawach udało mi się znaleźć dodatkowe rzeczy potrzebne do zrobienia tego z Post. Dziękuję – Stavros

+0

czy mogę przesłać kilka danych dodatkowych do usługi sieciowej, która do mnie dzwoni, więc czy mam to zrobić? – Madhav

10

Chciałbym zbadać przy użyciu ASP.NET MVC dla usługi sieci web. Możesz podać parametry za pomocą standardowych parametrów formularza i zwrócić wynik jako JSON.

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

W kliencie, należy użyć 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; 

gdzie trzeba

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

Dzięki za informacje, ale już wdrożyłem to bez Json. Następnym razem będę eksperymentować z tym. – Stavros

3

jeden sposób, aby wywołać metodę POST, kiedyś wywołać metodę POST w WebAPI.

  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

można powrócić listy użytkowania obiektu 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); 
Powiązane problemy