powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Простой веб сервис
15 сообщений из 15, страница 1 из 1
Простой веб сервис
    #39712111
Ivanich87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Я сразу извиняюсь, у меня просто вопрос, но я пока не могу найти на него ответ, а сам веб-сервисы раньше не писал.
Ситуация такая: Есть два sql сервера, оба на разных vps серверах. Хочу из одного sql перенести данные на другой. Для этого формирую на sql xml
Код: sql
1.
select * FROM Sales  FOR XML AUTO

и передаю его post запросом в веб-сервис, который будет на одном VPS сервере с другим sql.
Далее хочу, чтобы в этом веб-сервисе вызывалась процедура на sql, в которую бы параметром передался бы этот xml.
Создаю проект на c#, добавляю новый контролер в котором пишу следующий код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        
public void Post([FromBody]string value)
        {
            SqlConnection conn = new SqlConnection("Data Source=MyServer;Initial Catalog=DB_Test;User Id=Usr; Password=Password; ;Packet Size=32767");

            conn.Open();
            SqlCommand cmd = new SqlCommand("exec TestProcedure '" + value + "'", conn);
            SqlDataReader reader = cmd.ExecuteReader();

        }


При этом параметр value получается пустой. Что не так и как правильно сделать?
...
Рейтинг: 0 / 0
Простой веб сервис
    #39712336
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivanich87,
Если базы продвинутые, то напрямую их можно соединить. Без сервиса.
Т.к. XML могут быть и гиговые.
Далее, какой проект создаете?
Если wcf, то там нет POST.
Если ASP, то в ветку ASP.
...
Рейтинг: 0 / 0
Простой веб сервис
    #39712578
Ivanich87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Использую ветку ASP.NET - web API
...
Рейтинг: 0 / 0
Простой веб сервис
    #39712583
Ivanich87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уточную, что xml выглядит например так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
<root>
  <Result Код="4196" Наименование="т.фиолетовый/св.серый" />
  <Result Код="4197" Наименование="black" />
  <Result Код="4198" Наименование="ardesia(т.синий)" />
  <Result Код="4200" Наименование="bianco" />
  <Result Код="4202" Наименование="т.синий/белый C" />
</root>
...
Рейтинг: 0 / 0
Простой веб сервис
    #39712629
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivanich87Petro123,

Использую ветку ASP.NET - web APIты сочинение в школе писал?
Вот также надо описывать в топике.
У тебя два проекта. На двух хостах А и Б.
Какие два проекта?.
Если на Б хосте веб АПИ, то то проверь что АПИ работает с любого браузера. Без проекта А.
Если в проекте А select from xml, то упакуй для отправки файл в zip и отправляй.
....
Но как вариант, хост Б может подключаться к обоим твоим базам сам. Без веб проекта на хосте А.
...
Рейтинг: 0 / 0
Простой веб сервис
    #39712656
Ivanich87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Давайте я немного сокращу.
Нужно написать веб-сервис, в который в теле запроса передавался бы некий xml, типа
Код: xml
1.
2.
3.
4.
5.
6.
7.
<root>
  <Result Код="4196" Наименование="т.фиолетовый/св.серый" />
  <Result Код="4197" Наименование="black" />
  <Result Код="4198" Наименование="ardesia(т.синий)" />
  <Result Код="4200" Наименование="bianco" />
  <Result Код="4202" Наименование="т.синий/белый C" />
</root>


и этот xml мы должны передать в процедуру на sql, который будет крутиться на этом же сервере рядом с веб-сервисом.
Если написать в веб-сервисе следующую функцию:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public void Post(string value)
        {
            SqlConnection conn = new SqlConnection("Data Source=MyServer;Initial Catalog=DB_Test;User Id=Usr; Password=Password; ;Packet Size=32767");

            conn.Open();
            SqlCommand cmd = new SqlCommand("exec TestProcedure '" + value + "'", conn);
            SqlDataReader reader = cmd.ExecuteReader();

        }


и вызвать запрос к серверу, передав xml в адресной строке, то все работает.
Но если xml будет большой, то он не выполняется. В таком случае, на сколько я понимаю, xml нужно передавать в теле запроса.
Тогда процедура веб сервиса выглядит:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public void Post([FromBody]string value)
        {
            SqlConnection conn = new SqlConnection("Data Source=MyServer;Initial Catalog=DB_Test;User Id=Usr; Password=Password; ;Packet Size=32767");

            conn.Open();
            SqlCommand cmd = new SqlCommand("exec TestProcedure '" + value + "'", conn);
            SqlDataReader reader = cmd.ExecuteReader();

        }


Но в результате переменная value - пустая.
Прочитал, что нужно объявлять модель,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        public class MyModelXML 
        {
            public string Код{ get; set; }
public string Наименование{ get; set; }
        }

        public HttpResponseMessage Post([FromBody]MyModelXML Myxml)
        {


И работать как с моделью. Но у меня же передается xml, в котором множество строк.
...
Рейтинг: 0 / 0
Простой веб сервис
    #39712661
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivanich87,
Во первых сократи xml в 10 раз архивированием перед отправкой.
Читал, я тебе писал? Или не читал?
Должен быть диалог, а не монолог.
...
Рейтинг: 0 / 0
Простой веб сервис
    #39712664
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivanich87Но если xml будет большой, то он не выполняется.
Да. Тогда либо там делать WCF service и предавать так:
serviceMy. SetFile(stringXML) ;
Либо там обычный сайт и отдать файл на POST или как закачивают музыку на сайт.
...
Рейтинг: 0 / 0
Простой веб сервис
    #39712713
Ivanich87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

да,я прочитал твое предложение архивировать, просто пока не представляю как это делать. Буду гуглить. Но что то мне подсказывает, что лучше сразу смотреть в сторону WCF.
...
Рейтинг: 0 / 0
Простой веб сервис
    #39712829
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivanich87,
Тогда делай wcf.
А по архивации в ветку шарп или гугл.
Удачи!
...
Рейтинг: 0 / 0
Простой веб сервис
    #39712950
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivanich87Добрый день. Я сразу извиняюсь, у меня просто вопрос, но я пока не могу найти на него ответ, а сам веб-сервисы раньше не писал.
Ситуация такая: Есть два sql сервера, оба на разных vps серверах. Хочу из одного sql перенести данные на другой. Для этого формирую на sql xml
Код: sql
1.
select * FROM Sales  FOR XML AUTO


и передаю его post запросом в веб-сервис, который будет на одном VPS сервере с другим sql.
Далее хочу, чтобы в этом веб-сервисе вызывалась процедура на sql, в которую бы параметром передался бы этот xml.
Создаю проект на c#, добавляю новый контролер в котором пишу следующий код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        
public void Post([FromBody]string value)
        {
            SqlConnection conn = new SqlConnection("Data Source=MyServer;Initial Catalog=DB_Test;User Id=Usr; Password=Password;Packet Size=32767");

            conn.Open();
            SqlCommand cmd = new SqlCommand("exec TestProcedure '" + value + "'", conn);
            SqlDataReader reader = cmd.ExecuteReader();

        }



При этом параметр value получается пустой. Что не так и как правильно сделать?
Если хотите передавать XML в хранимую процедуру, то это делается не так, не конкатенацией строк.

А примерно так (рабочий код сейчас сходу не найду, пишу по памяти):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public void Post([FromBody]string value)
{
    using (var connection = new SqlConnection("Data Source=MyServer;Initial Catalog=DB_Test;User Id=Usr; Password=Password; ;Packet Size=32767"))
    {
        connection.Open();

        using (var command = new SqlCommand("TestProcedure", connection))
        {
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add("@xml", SqlDbType.Xml).Value = new SqlXml(new XmlTextReader(value, XmlNodeType.Document, null));

            command.ExecuteNonQuery();
        }
    }
}
...
Рейтинг: 0 / 0
Простой веб сервис
    #39714852
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivanich87Petro123,

да,я прочитал твое предложение архивировать, просто пока не представляю как это делать. Буду гуглить. Но что то мне подсказывает, что лучше сразу смотреть в сторону WCF.
Можешь запаковать и передавать массив байтов или поток:
Код: c#
1.
2.
3.
4.
5.
public void Post(HttpRequestMessage request)
		{
			byte[] value = request.Content.ReadAsByteArrayAsync().Result;
			//...
		}
...
Рейтинг: 0 / 0
Простой веб сервис
    #39757546
Aleksey V.P.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данные между БД лучше всего через DB Links передавать. И надёжнее и быстрее получиться.
...
Рейтинг: 0 / 0
Простой веб сервис
    #39765225
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Ivanich87,
Во первых сократи xml в 10 раз архивированием перед отправкой.
Читал, я тебе писал? Или не читал?
Должен быть диалог, а не монолог.

про 10 раз - это эмоции.
Если хмл будет такой, как автор привел в примере, то его лучше вообще не архивировать, будет больше, чем оригинал.
...
Рейтинг: 0 / 0
Простой веб сервис
    #39765245
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупинпро 10 раз - это эмоции.ну возьми текстовый файл. Содми и выложи сюда разницу размеров без эмоции. Только факты.

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


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