powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Подключение и отправка данных веб-сервису
7 сообщений из 7, страница 1 из 1
Подключение и отправка данных веб-сервису
    #38759648
osvaldv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток! Вопрос наверняка достаточно банальный, но никак не могу разобраться. Суть проблемы:
набросал веб-сервис, веб-метод HelloWorld немного изменил:
Код: c#
1.
2.
3.
4.
5.
[WebMethod]
        public string HelloWorld(string in_text)
        {
            return "Hello World " + in_text;
        }



Протестировал, все ок. Затем создал консольное приложение, там добавил ссылку на сервис, студия сгенерировала соответствующие классы и, естественно, все работает на ура. Потому что есть wsdl и так далее.

А есть ли возможность подключиться к сервису без "помощника"? :)
Пробовал так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:50727/Service1.asmx/HelloWorld");
request.Method = WebRequestMethods.Http.Post;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream stream = response.GetResponseStream();
                StreamReader streamreader = new StreamReader(stream);
                string s = streamreader.ReadToEnd();
                Console.WriteLine("s = " + s);                



И получалось получить ответ от сервиса, но тогда веб-метод HelloWorld не принимал параметров. Затем изменил метод, принимает один параметр - но никак не удается передать этот параметр методу, то пишет "неверный предикат", то "500 внутренняя ошибка сервера". В инете много информации, голова уже идет кругом. Как передать параметр?
...
Рейтинг: 0 / 0
Подключение и отправка данных веб-сервису
    #38759818
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Веб-сервисы(WebMethod) работают поверх протокола http на протоколе SOAP, все данные передаются в XML. Соответственно, обычные GET запросы с параметрами здесь не катят.
Матчасть.
...
Рейтинг: 0 / 0
Подключение и отправка данных веб-сервису
    #38759930
osvaldv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как видно из кода использую POST запросы, матьчасть не отвечает на поставленный вопрос - там рекомендуют либо создавать ссылку на сервис, либо использовать WSDL.exe для генерации. Что в принципе одно и тоже.
...
Рейтинг: 0 / 0
Подключение и отправка данных веб-сервису
    #38759982
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
HttpWebRequest request = (HttpWebRequest)WebRequest
                .Create(@"http://localhost:50727/Service1.asmx?op=HelloWorld");
            request.Headers.Add(@"SOAP:Action");
            request.ContentType = "text/xml;charset=\"utf-8\"";
            request.Accept = "text/xml";
            request.Method = "POST";

            XmlDocument soapXml = new XmlDocument();
            soapXml.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8""?>
                <soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" 
                    xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" 
                    xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
                  <soap:Body>
                    <HelloWorld xmlns=""http://tempuri.org/"">
                        <in_text> - Hello Client!!!</in_text>
                    </HelloWorld>
                  </soap:Body>
                </soap:Envelope>");

            using (Stream stream = request.GetRequestStream())
            {
                soapXml.Save(stream);
            }

            using (WebResponse response = request.GetResponse())
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    string soapResult = reader.ReadToEnd();
                    Console.WriteLine(soapResult);
                }
            }
...
Рейтинг: 0 / 0
Подключение и отправка данных веб-сервису
    #38760015
osvaldv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKI,

большое спасибо!! Все заработало.
...
Рейтинг: 0 / 0
Подключение и отправка данных веб-сервису
    #38760277
osvaldv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
продолжая тему сервисов..

А если хотим передать параметр типа XML? Переписал метод - на вход принимает параметр XmlElement. Но что то не взлетело :(

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
string s_xml = File.ReadAllText("Example.xml");

XmlDocument soapXml = new XmlDocument();
            soapXml.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8""?>
                <soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" 
                    xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" 
                    xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
                  <soap:Body>
                    <HelloWorld xmlns=""http://tempuri.org/"">
                        <in_text>"+ s_xml +@"</in_text>
                    </HelloWorld>
                  </soap:Body>
                </soap:Envelope>");



Сервер возвращает 500 ошибку. Наверняка решение простое, но пока никак не могу до него дойти ((
...
Рейтинг: 0 / 0
Подключение и отправка данных веб-сервису
    #38761401
osvaldv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался с отправкой xml-данных веб-сервису. Надо было добавить атрибут
Код: c#
1.
[XmlAnyElement]

.
Но, как это всегда бывает, возникла другая проблема - обработка полученных данных на сервисе. И так, сам сервис:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
        [WebMethod]
        public string TestXML([XmlAnyElement]XmlElement input)
        {            
            string res = "";       

            try
            {
                XDocument xDoc = XDocument.Parse(input.OuterXml);
                XElement xl = xDoc.Root.Element("Sec1");
                res = xl.ToString();
            }
            catch (Exception ex)
            {
                res = "ERROR = "+ex.Message;
            }
            return res;
        }


Получаю ошибку - в экземпляре объекта не задана ссылка на объект.

Пример XML-файла, который отправляю сервису:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
string soap2 = @"<?xml version=""1.0"" encoding=""utf-8""?>
                <soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" 
                xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" 
                xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">
  <soap12:Body>
    <TestXML xmlns=""http://tempuri.org/""><Disp>
                                             <Sec1>
                                                <Pole1>pole1</Pole1>
                                                <Pole2>pole2</Pole2>
                                             </Sec1>
                                             <Sec2>
                                                <Pole3>pole3</Pole3>
                                                <Pole4>pole4</Pole4>
                                             </Sec2>
                                           </Disp></TestXML>
  </soap12:Body>
</soap12:Envelope>";



Может кто сталкивался с подобным?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Подключение и отправка данных веб-сервису
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]