2010-06-04 9 views
5

Próbuję napisać funkcję, która może wywołać webmethod z webserive, podając nazwę metody i adres URL usługi sieci web. Znalazłem kod na blogu, który robi to dobrze, z wyjątkiem jednego szczegółu. Wymaga to podania XML żądania. Celem jest pobranie szablonu XML żądania z samej usługi. Jestem pewien, że jest to możliwe, ponieważ widzę szablony XML żądań i odpowiedzi, jeśli mam dostęp do adresu URL usługi internetowej w mojej przeglądarce.Programowo wywoływać webmethods w C#

Jest to kod, który wywołuje WebMethod programowo:

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

jak można wywołać metodę (serwis internetowy lub inną), jeśli nie wiesz z góry, jakie parametry wymaga? –

+0

Załóżmy na razie, że te webmethods nie wymagają żadnych parametrów. – hancock

+0

Czy usługa internetowa udostępnia opis WSDL? – dariom

Odpowiedz

2

W nawiązaniu do powyższych uwag. Jeśli masz plik WSDL, który opisuje twoją usługę, używasz tego jako informacji wymaganych do komunikacji z twoją usługą internetową.

Używanie klasy pośredniczącej do komunikacji z usługą proxy to łatwy sposób na pozbycie się podstawowych funkcji HTTP i XML.

Istnieją sposoby wykonania tej czynności w czasie wykonywania - generowanie kodu generowanego przez program Visual Studio po dodaniu odwołania do usługi WWW do projektu.

Użyłem rozwiązania opartego na: this newsgroup question, ale istnieje również other examples out there.

+0

Tak, to wydaje się dobrym podejściem. Dziękuję za odpowiedź. – hancock

0

Do Twojej wiadomości brakuje kodu using. Powinien być bardziej podobny do tego:

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

Masz rację, ale użyłem rozwiązania dariom, które nie używa tego fragmentu kodu. – hancock

Powiązane problemy