Программный вызов webmethods на языке C#
Я пытаюсь написать функцию, которая может вызывать webmethod из webserive с учетом имени метода и URL-адреса веб-сервиса. Я нашел какой-то код в блоге, который делает это просто отлично, за исключением одной детали. Это требует, чтобы запрос XML также был предоставлен. Цель здесь-получить XML-шаблон запроса от самого веб-сервиса. Я уверен, что это возможно каким-то образом, потому что я могу видеть оба XML-шаблона запроса и ответа, если я обращаюсь к URL-адресу веб-сервиса в моем браузер.
Это код, который вызывает webmethod программно:
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());
2 ответа:
Далее следуют комментарии выше. Если у вас есть файл WSDL, описывающий вашу службу, вы используете его в качестве информации, необходимой для связи с вашей веб-службой.
Использование прокси-класса для связи с прокси-сервером службы-это простой способ абстрагироваться от лежащих в его основе функций HTTP и XML.
Есть способы сделать это во время выполнения-по сути, сгенерировать код, который Visual Studio генерирует при добавлении ссылки на веб-службу в ваш проект.
Я использовал решение, которое было основано на: этом вопросе группы новостей, но есть также другие примеры.
К вашему сведению, в вашем коде отсутствуют блоки
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()); } } }