Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

​Задачка ​на подумать.

2689  1 2 3 4 5 6 7 все
Murr
патриот29.08.20 16:21
Murr
29.08.20 16:21 
Задачка на подумать.

Две системы - Клиент и Сервер,

Клиент делает ОДИН запрос.

В ответ на запрос Сервер генерирует и отдает несколько (сотен/тысяч?) файлов.

Время генерации файлов неопределено.


Ограниченя:

- нельзя использовать пулинг

- количество возвращаемых файлов неизвестно.


Как решать?


Имплементация - .Net, SOAP/WCF.

#1 
  yurka_ffm
постоялец29.08.20 17:03
NEW 29.08.20 17:03 
в ответ Murr 29.08.20 16:21

Наверное стримингом каким-нибудь типа Кафки.

#2 
samowar
знакомое лицо29.08.20 19:21
NEW 29.08.20 19:21 
в ответ Murr 29.08.20 16:21, Последний раз изменено 29.08.20 21:40 (samowar)

Не знал, что такое soap. Выяснилось что это не что иное как xml, только через сетевой коннект.

Вроде бы, чего проще, выдает с той стороны сервер xml за заранее неизвестное время и неизвестным содержимым. Дождаться полного комплектного xml или закрытия коннекта сервером. Есть же какой-то признак окончания передачи. Но раз над этим предлагается подумать - не так все просто и его там нет (?). Что за собака зарыта в данном примере?


Анекдот в тему

https://4tob.ru/anekdots/2082


Upd- пулинг таки не поллинг

#3 
AlexNek
патриот29.08.20 21:23
AlexNek
NEW 29.08.20 21:23 
в ответ Murr 29.08.20 16:21
Как решать?
А никак. Все извращения упираются в потерю соединения/сбой канала связи. А если еще добавить и Х клиентов, то серверу будет совсем хорошо.
#4 
Murr
патриот29.08.20 22:32
Murr
NEW 29.08.20 22:32 
в ответ yurka_ffm 29.08.20 17:03

Надо будет посмотреть Кафку. Вроде порт под .Нет есть.


Хотя чем именно стреамить меня не особенно интересует - вполне достатчно пересылки файла как массива байт - СОАП/ВЦФ вполне справляются.


Меня интересует как получить весь объем файлов в условиях когда он заранее не известен и без опроса сервера на предмет готовности.

#5 
Murr
патриот29.08.20 22:46
Murr
NEW 29.08.20 22:46 
в ответ samowar 29.08.20 19:21

Дождаться полного комплектного

-----

Идея - хорошая. :)

Только вот Я как раз от нее ухожу - никаких терабайтов не хватит писать всю генерацию на диск.


Так что генерирующая единица берет поток и кидает в него что-там-получится.

Как правило - поток является буфером ВЦФ и все что в него скинуто является отдельным файлом. Закончили - отвалили - дальше ВЦФ.

Проблема в том, что неизвестно сколько времени займет генерация и сколько всего файлов будет сгенерировано. Не гарантирована даже последовательность генерации.

#6 
  moose
коренной житель29.08.20 22:46
NEW 29.08.20 22:46 
в ответ Murr 29.08.20 16:21, Последний раз изменено 29.08.20 22:48 (moose)

новой херней маетесь, поручик? кто-то таки в говно вступил и вас снова нанял? у него скоро точно вжикнет



#7 
Murr
патриот29.08.20 22:58
Murr
NEW 29.08.20 22:58 
в ответ AlexNek 29.08.20 21:23

А никак.

-----

А надо... безум


Все извращения упираются в потерю соединения/сбой канала связи.

-----

Как раз это не критично. По крайней мере ВЦФ сбои позволяет обрабатывать.


А если еще добавить и Х клиентов, то серверу будет совсем хорошо.

-----

Это Я знаю.

Потому клиент занимают ограниченное количество ресурса сервера и процесс управляем.

В самом плохом варианте - генератор будет ждать пока ВЦФ не дошлет блок и затем продолжит.


Но вопрос не в этом. Не хочется опрашивать сервер, а как извратится - не понимаю...

Точнее - понимаю как можно сделать при одном потоке, но пока не вижу простого варианта для

многопоточки.

#8 
AlexNek
патриот29.08.20 23:07
AlexNek
NEW 29.08.20 23:07 
в ответ Murr 29.08.20 22:32
весь объем файлов в условиях когда он заранее не известен

Ну просто оборачиваешь данные в какой то "протокол".

Типа:

- блок 123, будет еше, "данные".

- Передача окончена. Всего было х блоков.

#9 
AlexNek
патриот29.08.20 23:11
AlexNek
NEW 29.08.20 23:11 
в ответ Murr 29.08.20 22:58
Как раз это не критично. По крайней мере ВЦФ сбои позволяет обрабатывать.

Странно, как там решается подобная проблема?

Начали генерацию утром, после окончания рабочего дня еще крутится. Вырубаем комп, идем домой. Завтра с утра хотим продолжить.

#10 
Murr
патриот30.08.20 10:09
Murr
NEW 30.08.20 10:09 
в ответ AlexNek 29.08.20 23:07

будет еше

-----

Вот именно этого Я и не знаю.


Собирался делать почти так

- место в (виртульной) файловой системе

- относительное имя файла

- данные, не блоком, а файл целиком (позднее можно подумать как порезать).


либо

- больше файлов нет.


Но что-то у меня прошлый раз оно не заработало как хотелось. Хотя Я даже более сложный протокол делал... хммм

#11 
Murr
патриот30.08.20 10:17
Murr
NEW 30.08.20 10:17 
в ответ AlexNek 29.08.20 23:11

Странно, как там решается подобная проблема?

-----

Не помню.

Год не трогал - все забыл.

А сейчас даже до того что было наработано не добраться.


Завтра с утра хотим продолжить.

-----

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

Отдельный файл - он не больше часа - за час по гигабитному каналу уйдет столько текста что хрен его чем посмотришь...

#12 
NightWatch
коренной житель30.08.20 11:57
NightWatch
AlexNek
патриот30.08.20 14:23
AlexNek
NEW 30.08.20 14:23 
в ответ Murr 30.08.20 10:09
Но что-то у меня прошлый раз оно не заработало как хотелось.

Мне сложно что то придумать, так как подобные задачи никогда не попадались. Просто one way соединение всегда весьма непросто.

#14 
Murr
патриот30.08.20 15:17
Murr
NEW 30.08.20 15:17 
в ответ NightWatch 30.08.20 11:57

Прочитал. Интересно. Но пока такого не делал.


Из того что не смог понять:

- как клиент обеспечивает прием фидбека. Судя по конфигурации на обоих должен работать ИИС.

- как будет выглядеть многопоточка. По описанию - один внесесссионный инстансе - т.е. однопоточка.


Надо садится и ручками крутить эти винтики...

#15 
NightWatch
коренной житель30.08.20 15:58
NightWatch
NEW 30.08.20 15:58 
в ответ Murr 30.08.20 15:17
Судя по конфигурации на обоих должен работать ИИС.

Где ты нашел эту конфигурацию?

По описанию - один внесесссионный инстансе - т.е. однопоточка.

Где это описание?

#16 
Murr
патриот30.08.20 20:09
Murr
NEW 30.08.20 20:09 
в ответ NightWatch 30.08.20 15:58

Где ты нашел эту конфигурацию?

------

Посмотри конфиг в части програмной конфигурации - там два хоста определены.


Где это описание?

-----

Аттрибут на интерфейсе.

#17 
NightWatch
коренной житель30.08.20 20:40
NightWatch
NEW 30.08.20 20:40 
в ответ Murr 30.08.20 20:09
Посмотри конфиг в части програмной конфигурации - там два хоста определены.

Конкретнее.


Аттрибут на интерфейсе.

У него есть имя. ServiceContractAttribute не отвечает ни за одно-/многопоточность, ни за время жизни объекта службы. Это задача другого атрибута.

#18 
uscheswoi_82
посетитель31.08.20 00:51
NEW 31.08.20 00:51 
в ответ Murr 29.08.20 16:21, Последний раз изменено 31.08.20 00:53 (uscheswoi_82)

В HTML5 уже давно реализовано, называется WebRTC. https://ru.wikipedia.org/wiki/WebRTC https://habr.com/ru/company/globalsign/blog/500356/

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
#19 
koder
патриот31.08.20 08:25
koder
NEW 31.08.20 08:25 
в ответ uscheswoi_82 31.08.20 00:51, Последний раз изменено 31.08.20 10:14 (koder)
В HTML5 уже давно реализовано, называется WebRTC.


Имхо это немного не то. SOAP это протокол, по которому 2 компа связываются в инете без участия человека. Сервер постоянно ждёт запрос по определенному ендпойнту и получив запрос, на него отвечает. Я не знаю конкретную реализацию этого протокола wcf, но те, с которыми я работал, выглядят просто- обычная функция, где передаются параметры, а результат это возвращаемое функцией значение. Теоретически можно упаковать и передать назад все необходимые файлы, но там чудовищный объем и время обработки больше мыслимого таймаута.

#20 
Программист
коренной житель31.08.20 10:02
NEW 31.08.20 10:02 
в ответ Murr 29.08.20 16:21
Как решать?

Я видел нечто подобное и 2 типа решений.


Решение 1:

клиент регистрируется на сервере и таким образом меняется с сервером ролями. Сделано это было на 2-х вебсервисах. Скажем IFileService и IFileServiceSubscriber.

На сервере крутится IFileServiceSubscriber, а на клиенте IFileService. При регистрации клиент передает URL к своему IFileService и собственно все.


Решение 2:

Реалиция была через ASP.NET SignalR. Мы соеденялись с хабом и потом просто ждали эвентов :) Детали реализации сказать не могу, т.к. симулятор этой байды делал коллега.


#21 
uscheswoi_82
посетитель31.08.20 17:09
NEW 31.08.20 17:09 
в ответ koder 31.08.20 08:25
SOAP

Я знаю что такое SOAP, я для Immowelt делал пример свою Immobilien, и там использовал во всю SOAP NuSOAP + ASP NET 2.0.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
#22 
Murr
патриот31.08.20 17:10
Murr
NEW 31.08.20 17:10 
в ответ NightWatch 30.08.20 20:40

Конкретнее.

-----

Аааа, виноват - это Я уже в другое посмотрел.

https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/duplex-services


WSDualHttpBinding binding = new WSDualHttpBinding(); EndpointAddress endptadr = new EndpointAddress("http://localhost:12000/DuplexTestUsingCode/Server"); binding.ClientBaseAddress = new Uri("http://localhost:8000/DuplexTestUsingCode/Client/");


#23 
Murr
патриот31.08.20 17:12
Murr
NEW 31.08.20 17:12 
в ответ uscheswoi_82 31.08.20 00:51

В HTML5 уже давно реализовано

------

Это замечательно. Остается пояснить как использовать в ВЦФ/СОАП. смущ

#24 
Murr
патриот31.08.20 17:21
Murr
NEW 31.08.20 17:21 
в ответ koder 31.08.20 08:25

и время обработки больше мыслимого таймаута

-----

Не-а... там задается время таймаута.

Плюс, он сбрасывается по получении какого-нибудь пакета.

В общем таймаут там не проблема.


можно упаковать и передать назад все необходимые файлы

------

А вот это как раз нельзя.

Т.е. технически - можно, но аккурат этого стараюсь избежать.

Мягко говоря в процессе генерации Сервер вообще ничего не пишет на диски.

Получается - хорошо - вместо 2-х минут - 0.9 секунды...


Но именно по-этому возникала задача - не зная чего и сколько будет - получить все, нo без опроса.

#25 
Murr
патриот31.08.20 17:27
Murr
NEW 31.08.20 17:27 
в ответ Программист 31.08.20 10:02

Решение 1

-----

Это решение очевидно.

Но это решение не укладывается в рамки поставленной задачи - есть Клиент и есть Сервер.

Делать из Клиента сервер очень не хочется.


Решение 2

------

Интересно.

Но если не меняли местами клиента и сервер... т.е. если не вешали листенер на клиенте, то остается поолинг - по другому об эвенте не сообщить.

Т.е. опять не совсем то что хочется.

#26 
Программист
коренной житель31.08.20 17:38
NEW 31.08.20 17:38 
в ответ Murr 31.08.20 17:27
Делать из Клиента сервер очень не хочется.

Ну тут хозяин - барин :)


Интересно.
Но если не меняли местами клиента и сервер... т.е. если не вешали листенер на клиенте, то остается поолинг - по другому об эвенте не сообщить.
Т.е. опять не совсем то что хочется.

На клиенте есть листенер. Вся магия происходит внутри и если клиент и становится сервером, то это все идет "из коробки". Но опять таки хозяин - барин :)


#27 
Murr
патриот31.08.20 17:48
Murr
NEW 31.08.20 17:48 
в ответ Программист 31.08.20 17:38

Ну тут хозяин - барин

-----

Ну представь себе что Клиент свободно распространяемый и кто угодно может скачать, инсталлировать и пользовать.

Все что требуется - доступ в инет по ХТТП.

И вдруг откуда не возьмись появляется требование поменять системное полиси в плане открытия левого порта... безум

Ну как? смущ

#28 
Программист
коренной житель01.09.20 09:29
NEW 01.09.20 09:29 
в ответ Murr 31.08.20 17:48
И вдруг откуда не возьмись появляется требование поменять системное полиси в плане открытия левого порта... безум
Ну как?

При использовании SignalR такого требования ИМХО нет.

Да и от куда ему взяться?

Вот есть сервер с открытым 80-м портом. На клиенте запускаешь вебсервис и вешаешь его на тот же 80-й порт :) Все работает как часы и никаких конфликтов.

#29 
AlexNek
патриот01.09.20 12:42
AlexNek
NEW 01.09.20 12:42 
в ответ Murr 31.08.20 17:21
Получается - хорошо - вместо 2-х минут - 0.9 секунды..

Странные у тебя диски, но что мешает записать в "память"?

Иначе получается генератор завязан на передачу?

#30 
koder
патриот01.09.20 13:49
koder
NEW 01.09.20 13:49 
в ответ Программист 01.09.20 09:29
На клиенте запускаешь вебсервис и вешаешь его на тот же 80-й порт :) Все работает как часы и никаких конфликтов.


Это значит, что если на клиенте уже есть работающий сервер по 80 порту, то все. Приплыли.


#31 
Программист
коренной житель01.09.20 14:27
NEW 01.09.20 14:27 
в ответ koder 01.09.20 13:49
Это значит, что если на клиенте уже есть работающий сервер по 80 порту, то все. Приплыли.

У Мурра клиент - это клиент :) На нем не может быть сервера :)


#32 
uscheswoi_82
посетитель01.09.20 14:41
NEW 01.09.20 14:41 
в ответ Программист 01.09.20 14:27

Кстати щас SOAP не популярен, а популярны микросервисы, докеры... В 2010 я делал на SOAP Immobilienportal, XML составлял, документацию по XML писал шок, послал резюме в Immowelt, они отказ мне прислали, а несколько лет наазд я на JSON перешёл. Что-то у них там постоянно объявление висит что нужен .net разработчик.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
#33 
Программист
коренной житель01.09.20 16:30
NEW 01.09.20 16:30 
в ответ uscheswoi_82 01.09.20 14:41

Не понимаю, почему ты прицепился к SOAP?

Мурр написал: .Net, SOAP/WCF , сервисы WCF - это либо REST либо WSDL. Полагаю, что Мурр просто перепутал SOAP и WSDL (благо и то и другое является языком описания веб сервисов).


А так SOAP не применяется наверное лет 10 уже. А вообще если у тебя в голове каша из SOAP, XML и JSON, то не удивительно, что тебе пришел отказ :)

#34 
Murr
патриот01.09.20 16:59
Murr
NEW 01.09.20 16:59 
в ответ Программист 01.09.20 09:29

вешаешь его на тот же 80-й порт

-----

А кто будет гарантировать что он свободен?

А кто будет гарантировать что из вне можно достучатся до 80-го порта?

Переиначивание Клиента в Сервер - понятно, но не рассматривается - там очень много головной боли у пользователя.


При использовании SignalR такого требования ИМХО нет.

-----

И как же тогда нотификация идет?

Проще - чтобы "Сервер" мог связаться с "Клиентом" клиент должен слушать... т.е. быть сервером.

Ну либо Клиент должен периодически опрашивать Сервер.

Оба варианта не интересны. смущ

#35 
Murr
патриот01.09.20 17:07
Murr
NEW 01.09.20 17:07 
в ответ AlexNek 01.09.20 12:42

Странные у тебя диски, но что мешает записать в "память"?

-----

А сколько у меня той памяти? Ну гигов 15-20... И чо - много клиенты понапишут? 200 клиентов по 100 мб - 2-3 секунды и с памятью все...


Иначе получается генератор завязан на передачу?

-----

Ну да.

Точнее - там интерфейс - как имплеметируется - так и будет.

А ты хочешь чтобы Я что-то делал локально? Ну есть у меня одна задачка - скомпилировать локально и отослать Дллку с доками. Но это не сейчас... мне сейчас больше требуется схемы корректно компилировать - мелкомягкие такое дерьмо слепили, что почти нихрена не работает...

#36 
uscheswoi_82
посетитель01.09.20 17:11
NEW 01.09.20 17:11 
в ответ Программист 01.09.20 16:30, Последний раз изменено 01.09.20 17:12 (uscheswoi_82)
то не удивительно, что тебе пришел отказ :)

Я думаю что не только мне отказ пришёл. Если бы они нашли бы программиста, то почему тогда с 2010г. объявление до сих пор висит? Что так мало asp net, C# программистов в Германии?


А вообще если у тебя в голове каша из SOAP, XML и JSON,

SOAP общалась между Linux и Windows сервером, в классическом asp net, т.е. в WebForms есть XML парзер, т.е. DataSet, а дальше можно подключить к сетке - https://www.c-sharpcorner.com/UploadFile/18fc30/displaying..., ну можно было MySQL Connector Net использовать, но я выбрал именно XML.Когда обращался к базе данных MySQL на линукс, благодаря NuSOAP можно было считывать данные из базы данных которая находилась на Linux, и присылала в формате XML. На JSON я перешёл в 2015-2017.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
#37 
Murr
патриот01.09.20 17:12
Murr
NEW 01.09.20 17:12 
в ответ Программист 01.09.20 14:27

это клиент

-----

Именно. И его конфигурацию Я не знаю и разбираться с нею желания нет совсем...


На нем не может быть сервера

-----

Ой, чего там только не может быть...

У меня вон с 10-к айпишников прописан был и по несколько сайтов на разных портах виселo...

#38 
Murr
патриот01.09.20 17:27
Murr
NEW 01.09.20 17:27 
в ответ Программист 01.09.20 16:30

сервисы WCF - это либо REST либо WSDL

-----

Не совсем корректно.


Полагаю, что Мурр просто перепутал SOAP и WSDL

-----

А имел Я в виду, что имплементируется либо СОАП - т.е. передача голых объектов данных, либо ВЦФ - т.е. помимо объектов данных еще доступна какая-то функциональность...

И посмотри терминологию - возможно что что не так воспринмается.

#39 
Murr
патриот01.09.20 17:35
Murr
NEW 01.09.20 17:35 
в ответ uscheswoi_82 01.09.20 17:11

SOAP общалась между

-----

СОАП абсолютно без разницы между какими системами идет обмен.

Все, что делает СОАП - передает между ними объекты - на одном конце - сериализует, на другом - восстанавливает и наполняет данными.

ХМЛ в середке - часто, но не единственно возможный вариант.


А путаница у тебя есть - стоит пересмотреть доки.

#40 
uscheswoi_82
посетитель01.09.20 17:46
NEW 01.09.20 17:46 
в ответ Murr 01.09.20 17:35

Это я прекрасно понимаю, просто я на немецком всё это изучал, трудно на русском писать.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
#41 
AlexNek
патриот01.09.20 20:10
AlexNek
NEW 01.09.20 20:10 
в ответ Murr 01.09.20 17:07
И чо - много клиенты понапишут? 200 клиентов по 100 мб

Что то сложно мне представить подобную задачу или ты тоже ютюб пишешь?

Вполне можно ограничить каким то максимальным буфером. Записали, упаковали, передали. Пока один передается другой(ие) пишется.

#42 
  moose
коренной житель01.09.20 21:00
NEW 01.09.20 21:00 
в ответ uscheswoi_82 01.09.20 17:46
Это я прекрасно понимаю, просто я на немецком всё это изучал, трудно на русском писать.

а у нас Murr (Katze его гебуртснахмэ) как раз немец, так что пишите по-немецки, мы тоже все поймем. вы прочли название форума? "германи" (германия значит).

#43 
Murr
патриот02.09.20 00:40
Murr
NEW 02.09.20 00:40 
в ответ AlexNek 01.09.20 20:10

Записали, упаковали, передали.

----

А зачем так сложно?

Взяли соединение, обернули буфером стрiама и стандартно пишем.

Заполнится буфер - поток в котором это делается просто приостановится, разгрузится буфер - все побежит дальше...

И никакой лишней писанины на диски и проблем с управляемостью...


Пока один передается другой(ие) пишется.

-----

хи-хи...

Там все упирается в пропускную способность канала и мне так кажется что мне ее надо заполнять по максимуму.

Потому порядка 2000 раздач в параллели надо считать нормой...


Что то сложно мне представить подобную задачу

-----

Хммм... какой-нибудь популярный веб-сайт... какую-нибудь чатилку с кучей чатеров,,,

Хотя... самое прямое ДСЛ, открытое для пользования из инета...

#44 
uscheswoi_82
посетитель02.09.20 02:03
NEW 02.09.20 02:03 
в ответ moose 01.09.20 21:00
Katze его гебуртснахмэ

Lol

так что пишите по-немецки,

Ok

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
#45 
koder
патриот02.09.20 05:27
koder
NEW 02.09.20 05:27 
в ответ Программист 01.09.20 16:30, Последний раз изменено 02.09.20 05:30 (koder)
Полагаю, что Мурр просто перепутал SOAP и WSDL (благо и то и другое является языком описания веб сервисов).


Нет. WSDL это язык, SOAP это протокол. Можно слепить связку клиент-сервис полностью самому, а можно сгенерировать год на основании WSDL, причем клиент и сервер на разных языках.


Мурр ничего не перепутал. В описании задачи должен стоять именно протокол, технология, по которой будут связываться клиент и сервер. Как конкретно это будет реализовано - вообще не важно, можно вручную собирать XML и отправлять.


А так SOAP не применяется наверное лет 10 уже


Буквально вчера писал. Есть готовый сервер, который раздает. Есть WSDL. 10 минут и клиент готов. А большой разницы нет, проблема Мурра не в протоколе, а в классической схеме "клиент спрашивает-сервер отвечает. Один вопрос-один ответ".


#46 
NightWatch
коренной житель02.09.20 09:13
NightWatch
NEW 02.09.20 09:13 
в ответ Murr 31.08.20 17:10

Все равно не нашел, что IIS должен работать и на сервере, и на клиенте. Да и вообще, что он должен быть.

#47 
MrSanders
коренной житель02.09.20 10:46
NEW 02.09.20 10:46 
в ответ uscheswoi_82 31.08.20 00:51
В HTML5 уже давно реализовано, называется WebRTC

На всякий случай, если это упустили. При передаче файлов через WebRTC не забываем про UDP/TCP. А то обидно будет. DataChannel емнип спасает.

Проблема в том, что скорость генерации может быть выше скорости, с которой данные забирают. И если мы не контролируем скорость генерации (а обычно оно так и есть), то начинаются танцы с бубнами и дисковым кэшем. Ну и при разрыве соединения тоже, начинаем генерацию сначала, или храним всё сгенерированное на диске пока не заберут. (А уж как firewall-ы любят TCP соединения, по которым полчаса ничего не передаётся...)

Так что как бы тут котик не геморроился, раз данных много, то мимо "генерируем, оповещаем, отдаём, удаляем" (даже если поблочно) он не пройдёт.

#48 
MrSanders
коренной житель02.09.20 10:58
NEW 02.09.20 10:58 
в ответ Программист 01.09.20 16:30
WCF - это либо REST либо WSDL. Полагаю, что Мурр просто перепутал SOAP и WSDL (благо и то и другое является языком описания веб сервисов).

Ошибочка. WSDL да, описание WS. А SOAP очень даже протокол, по которому как раз таки описаные WSDLем сервисы (endpoints) вызывать можно.

А так SOAP не применяется наверное лет 10 уже.

Да-да, конечно. Прямо как кобол. Берём любую фирму покрупнее и офигеваем. Все банки, страховки просто битком набиты сервисами с SOAPом. Новое на нём редко делают, особенно когда "чо тут думать, программировать надо". А когда надо автоматически валидировать запросы то обычно "ой, а для JSON такого нет? Ну тогда остаёмся с XML и SOAP".

Ну да ладно, JSON тоже медленно и не спеша идёт по пути XML. JSON Schema придумали (хоть ещё и не до конца), скоро и до JSON-WSDL с JSON-SOAP дойдём. И тут модные и неповторимые откроют для себя не знаю что... protobuf? :) И будем опять нечитаемыми бинарными данными обмениваться.

#49 
koder
патриот02.09.20 14:08
koder
NEW 02.09.20 14:08 
в ответ Murr 29.08.20 16:21

Если на сервере можно хранить состояние, то я бы (если бы не нашел в инете нормальное решение) инитиализировал бы начало сессии первым запросом клиента. Потом бы клиент столько раз повторял бы запрос "дайСледующийФайл()", пока бы сервер не ответил бы "больше файлов нет". На сервере пришлось бы хранить инфу какие файлы уже сгенерированы и для какого клиента(сессии)

#50 
AlexNek
патриот02.09.20 14:59
AlexNek
NEW 02.09.20 14:59 
в ответ Murr 02.09.20 00:40
Хммм... какой-нибудь популярный веб-сайт... какую-нибудь чатилку с кучей чатеров

Ну да пара сотен челов пишет однвоременно тектсы по 100 Мб

#51 
Murr
патриот02.09.20 19:14
Murr
NEW 02.09.20 19:14 
в ответ NightWatch 02.09.20 09:13

не нашел, что IIS должен работать и на сервере, и на клиенте.

-----

Можно не ИИС - можно Апаче. Или какой-нибудь ВебСфере.

Любое, на чем можно обрабатывать ХТТП-запросы - СОАП/ВЦФ аккурат через него имплементированы.


То, что тебе надо посмотреть - привязку - там используются два РАЗНЫХ порта.

Соответственно на каждом из них должны висеть листенеры.

Можно, конечно, полнстью написать свой обработчик, но зачем? Лучше задачу решать...


Да и вообще, что он должен быть.

-----

Ээээ... может попробуешь вообще без сети? безум

#52 
Murr
патриот02.09.20 19:31
Murr
NEW 02.09.20 19:31 
в ответ MrSanders 02.09.20 10:46

скорость генерации может быть выше скорости, с которой данные забирают

-----

Генерация быстрее всегда. На текущем железе - на 4-6 порядков. И так и останется даже не толстых каналах.


если мы не контролируем скорость генерации

-----

Контролируем.

Причем двумя способами - либо заполненностью буфера, либо количеством активных потоков.

Последний на сегодня выглядит проще и работает быстрее. Только один момент напрягает - в имеющейся имплементации используется СтрингБуилдер и происходит двойная буферизация - надо поменять и сразу писать в правильный поток...



начинаем генерацию сначала

-----

С точки получения последнего корректного файла.

Я вот думаю - достаточно для текстовок 64Кб или надо больше?

Читать их будут только если что-то не работает...



"генерируем, оповещаем, отдаём, удаляем"

-----

Ну а то...

Просто хочется обойтись без "оповещаем" и "удаляем".

Оповещаем - нет такой возможности - не гарантируется доступ к Клиенту.

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

#53 
Murr
патриот02.09.20 19:40
Murr
NEW 02.09.20 19:40 
в ответ MrSanders 02.09.20 10:58

будем опять нечитаемыми бинарными данными обмениваться

-----

Скорее - обмениваться будем двумя типами данных:

- разово - набором каких-нибудь описаний/фрагментов результатa (для локального кеширования)

- регулярно - бинарными ключами к набору хаха

#54 
Murr
патриот02.09.20 19:42
Murr
NEW 02.09.20 19:42 
в ответ koder 02.09.20 05:27

а в классической схеме "клиент спрашивает-сервер отвечает. Один вопрос-один ответ".

-----

Именно так.

У меня один запрос и много ответов.

Минус - поолинг, минус слушающий клиент.

#55 
Murr
патриот02.09.20 19:58
Murr
NEW 02.09.20 19:58 
в ответ koder 02.09.20 14:08, Последний раз изменено 02.09.20 20:01 (Murr)

Если на сервере можно хранить состояние

-----

На сервере нужно будет хранить текущее состояние клиентского проекта.

Во втором релизе ожидается инкрементальный билд - ре-генерируем только затронутые изменениями части.

Так что какая-то инфа будет хранится.

Одно НО - хранится будет не в сессии.


пока бы сервер не ответил бы "больше файлов нет".

-----

Вот это у меня прошлый раз и не получилось.

Генерация идет в параллельных потоках.

Можно получить "больше файлов нет" - как признак того что дополнительных файлов не будет.

Но на момент получения оного генерация/передача может еще не закончится.

Получаем не все файлы на месте, но запускаем следующий шаг, который валится.


На сервере пришлось бы хранить инфу какие файлы уже сгенерированы

-----

Не только это.

Еще кучу служебки - передается, передан, проверена CRC32...

Но все это дает лишний оверхед. Даже кеширование этой инфы на клиенте не помогает...

#56 
Murr
патриот02.09.20 19:59
Murr
NEW 02.09.20 19:59 
в ответ AlexNek 02.09.20 14:59

Ну да пара сотен челов пишет однвоременно тектсы по 100 Мб

-----

А разве это сложно? смущ

#57 
NightWatch
коренной житель02.09.20 21:28
NightWatch
NEW 02.09.20 21:28 
в ответ Murr 02.09.20 19:14
Можно не ИИС - можно Апаче. Или какой-нибудь ВебСфере. Любое, на чем можно обрабатывать ХТТП-запросы - СОАП/ВЦФ аккурат через него имплементированы.

Значит, у меня службы работают волшебным образом, поскольку кроме .Net Framework на хосте ничего нет.


То, что тебе надо посмотреть - привязку - там используются два РАЗНЫХ порта.

Только если используется http в качестве транспорта. При использовании tcp callback передаются по тому же сокету, который создается при соединении со службой.

#58 
AlexNek
патриот02.09.20 21:47
AlexNek
NEW 02.09.20 21:47 
в ответ Murr 02.09.20 19:59
Ну да пара сотен челов пишет одновременно тексты по 100 Мб-----А разве это сложно?

ну давай что то осмысленное натипаешь на 100 мб спок

#59 
Murr
патриот03.09.20 01:28
Murr
NEW 03.09.20 01:28 
в ответ NightWatch 02.09.20 21:28

Значит, у меня службы работают волшебным образом

-----

Проверяй. Возможно что ты что-то упустил...


Только если используется http в качестве транспорта.

-----

Если используется НЕ ХТТП - возникают все ранее описанные проблемы с доступом к неизвестному порту, а в сильно продвинутых средах еще и по непонятному протоколу...



При использовании tcp callback передаются по тому же сокету

-----

Не знал нюанса.

Но для задачи большой роли не играет - у меня проблема в множественных ответаx на единичный запрос.

#60 
Murr
патриот03.09.20 01:33
Murr
NEW 03.09.20 01:33 
в ответ AlexNek 02.09.20 21:47

ну давай что то осмысленное натипаешь на 100 мб

-----

А разве сложно?

Возьми красивую картинку и перекодируй ее в хех-код строчными группами 2 по 8 и контролькой в конце... Ну как в Радио програмки печатались... смущ

#61 
koder
патриот03.09.20 06:39
koder
NEW 03.09.20 06:39 
в ответ Murr 02.09.20 19:42, Последний раз изменено 03.09.20 08:09 (koder)
У меня один запрос и много ответов.


хммм Не бывает много ответов. Это уже не классическая схема. Если клиент слушает, то это уже сервер по какому то порту.


Генерация идет в параллельных потоках.

Это означает, что сервер стартует генерацию многих файлов одновременно и правила генерации каждого файла известны до начала генерации, в смысле количество или имена или параметры есть до начала генерации. На основании этих правил сейчас сервер сoздает 100 или 100500 потоков и каждому потоку говорит, как должен генерироваться каждай конкретный файл.


Эту работу можно переложить на клиента. Клиент отправляет первый запрос на генерацию и получает ответ в виде правил. Например 375 имен файлов. Потом клиент стартует асинхронно 375 запросов и в каждом передает имя файла(или другой параметр, необходимый для начала генерации этого конкретного файла). Сервер же просто получает запрос с параметром(в нашем случае имя файла) и знает, какой конкретно файл ему надо генерировать и кому пересылать. Eму наплевать, были ли еще запросы с клиента, что он там уже сгенерировал до этого и сколько осталось. Все запросы без состояния, сервер ничего не хранит. Отплевался файлом и забыл. Отвечает одновременно на множество запросов, поэтому генерация будет в потоках и будет идти одновременно, как для одного клиента, так и для всех клиентов.


Клиент же как раз знает, сколько файлов должно быть всего. Он формирует 375 запросов и ждет ответы. Они будут приходить в разной последовательности, на ошибочные ответы клиент может запросы повторить. Но получив последний ответ клиент знает - сеанс oкончен, можно переходить к следующему этапу. Процесс можно протоколировать, клиент может постояно отчитываться, сколько файлов ожидается и сколько уже получено.

#62 
NightWatch
коренной житель03.09.20 07:03
NightWatch
NEW 03.09.20 07:03 
в ответ Murr 03.09.20 01:28

Ты конкретно не в теме. И в который раз убеждаюсь, что твои посты ты пишешь больше для себя, чем для других.

#63 
Murr
патриот03.09.20 09:50
Murr
NEW 03.09.20 09:50 
в ответ koder 03.09.20 06:39

в смысле количество или имена или параметры есть до начала генерации

-----

Увы - нету.

Есть набор шаблонов - какие из них и в каком порядке будут использованы вычисляется перед запуском очередного потока. Имя файла можно получить из потока после запуска.


Простой пример - генерируется один класс.

Разработчик шаблона написал так, что каждый имплементируемый интерфейс пишется в отдельный файл.

Сколько именно и каких интерфейсов надо строить определяется из:

- конфигурации Сервера

- конфигурации Клиента

- данных Клиента.

Любая из частей может быть изменена независимо.

Все три вещи доступны только внутри шаблона - Я не знаю в каком виде они будут заданы и как их использовать.


и каждому потоку говорит, как должен генерироваться каждай конкретный файл.

-----

Невозможно.

Как правило имя файла строится на каких-то пользовательских данных - мне об них ничего не известно и Я хочу иметь систему в которой мне это знать не надо - шаблоны пишутся не мною.

Так что сначала запускается генерация и только потом становится известно имя файла.


Клиент же как раз знает, сколько файлов должно быть всего.

-----

Он этого не знает. И пока не начата генерация посчитать сколько и каких файлов нет никакой возможности. Можно получить имя из потока после того как он запущен.


Ты представляешь себе статическую систему из которой можно что-то получить до запуска, а система - динамическая - из нее можно что-то получить только когда она работает и получать это можно только по частям. смущ


#64 
Murr
патриот03.09.20 09:52
Murr
NEW 03.09.20 09:52 
в ответ NightWatch 03.09.20 07:03

Ты конкретно не в теме.

-----

Возможно. Веб-сервисов Я писал не слишком много и дальше простой конфигурации пока не разбирался.

#65 
koder
патриот03.09.20 11:20
koder
NEW 03.09.20 11:20 
в ответ Murr 03.09.20 09:50, Последний раз изменено 03.09.20 11:22 (koder)
и каждому потоку говорит, как должен генерироваться каждай конкретный файл.

Это потоки. Это значит, что они независимы. И это значит, что нельзя дожидаться, пока поток отбегает, что бы на основе результатов его работы стартовать новый поток, это уже не потоки, это уже последовательное выполнение. И это значит, что условия генерирования должны быть известны непосредственно перед генерированием и не во время его. Неважно насколько сложны условия и от чего они зависят


Как правило имя файла

Черт с ним, с именем. Поток должен знать, как, что и где генерировать. Эту информацию он должен получать перед стартом. Вот именно эту инфу нужно сначала для всех потоков закинуть на клиент, а потом клиент будет делать запросы для каждого конкретного потока.


И пока не начата генерация посчитать сколько и каких файлов нет никакой возможности.

Тогда это НЕ потоки. Тогда это последовательное выполнение. И нет никакого смысла пихать это в потоки, ловить приключения на задницу с синхронизацией, что бы дожидаться и отлавливать результат работы потока.

Ты представляешь себе статическую систему из которой можно что-то получить до запуска, а система - динамическая - из нее можно что-то получить только когда она работает и получать это можно только по частям.

Проблемы с архитектурой. Представь себе проезд на поезде с пересадками. Вместо того, что бы распланировать поездку ты не только прикидываешь, что твоя первая пересадка может закончится где угодно и твой следующий билет ты можешь купить только на месте(это плохо, но ок), ты еще и планируешь на всех поездах ездить отновременно (потоки)


В этом случае задача не имеет оптимального решения. Просто потому что архитектура левая.
Сервер имеет желание отдавать файлы по одному, сразу после генерации, но генерирует их в потоках, может слепить одновременно стук пять(причем последовательность тоже не определена, потоки, блин, один может обогнать другой), хотя его никто об этом не просил. Сервер только отвечает, только предоставляет что то в пользование. Правило "один вопрос - один ответ" соблюсти невозможно.


Как вариант можно предусмотреть костыль в виде буфера(ты это имел в виду, когда писал "нельзя использовать пулинг"?), где складываются пары (ид клиента - файл для клиента). Клиент делает запрос, запрос проверяет буфер и если ничего не находит, то ждет. Находит файл - забирает. Находит маркер окончания процесса - считает сеанс забора оконченным.


#66 
AlexNek
патриот03.09.20 13:18
AlexNek
NEW 03.09.20 13:18 
в ответ Murr 03.09.20 01:33
ну давай что то осмысленное натипаешь на 100 мб-----А разве сложно?Возьми красивую картинку и перекодируй ее в хех-код

Я не смогу найти даже одного такого извращенца, который к тому же не умеет читать условия задачи спок

#67 
Murr
патриот03.09.20 13:30
Murr
NEW 03.09.20 13:30 
в ответ koder 03.09.20 11:20

Проблемы с архитектурой.

-----

Неа, с архитектурой все нормально.

Просто ты не совсем понимаешь что и как должно происходить и пытаешься получить результат

обойдя ограничения,

Но ограничения - они не с потолка взяты.


Сейчас пишутся Клиент и Сервер.


Шаблоны не включены ни в Клиента, ни в Сервер - они будут добавлятся позднее и не мною.

С какими структурами данных шаблоны будут работать будет определятся в процессе написания шаблонов.

Мне нужно, чтобы Я никак не вмешивался в процесс написания и включения шаблонов в систему.

Еще мне нужно, чтобы на Клиента не загружался дополнительный исполняемый код.


Клиент делает две вещи:

- загружает на сервер документ, на основании которого будет что-то генерироваться (форма - неизвестна)

- получает и раскладывает по папочкам файлики сгенеренные Сервером


Сервер делает хренову хучу вещей, но для клиента это:

- приемник документа

- источник н-го количества файлов.


Так вот весь обмен Клиента с Сервером мне нужно написать сейчас.

Без знания об том, какой документ отсылается и чего и сколько будет обратно.

По этому и вокник вопрос - как отослав один документ получить обратно неизвестное количество файлов.

Плюс указанные ограничения.


Поток должен знать, как, что и где генерировать.

-----

Неа, нужно всего лишь передать параметры инстанцированному шаблону и вызвать один метод.

Что будет происходить внутри - мне не интересно - результат выведется в предоставленный стреам - файловый или сетевой - без разницы.


Эту информацию он должен получать перед стартом.

-----

Замечательно.

Проблема в том что у меня этой информации нет.

И получать ее ДО генерации тоже не хочется.

Просто потому что получение этой информации требует наличия исполняющегося шаблона.

Ну а если уже все есть - так чего же его выбрасывать и делать по-новой?


Находит маркер окончания процесса - считает сеанс забора оконченным.

-----

При однопоточной - да, без проблем.

Ситуацию с многопоточкой Я объясннял выше.

А однопоточку Я делать не буду - слишком много плюсов в потоках для этой задачи.


что бы на основе результатов его работы стартовать новый поток

-----

Этого и не надо.

#68 
koder
патриот03.09.20 14:02
koder
NEW 03.09.20 14:02 
в ответ Murr 03.09.20 13:30
Просто ты не совсем понимаешь что и как должно происходить и пытаешься получить результатобойдя ограничения,

Кустарщина. Каждый обход ограничения, это фокус и когда через пару лет кто то попытается понять, что ты наваял, что бы развивать дальше, смотри, что бы он тебя не нашел. Програмиссты бывяют склоны к насилиюулыб


Еще мне нужно, чтобы на Клиента не загружался дополнительный исполняемый код.

Об исполняемом коде никто и не говорит. Смотри. Я твой клиент, ты готовишь бумажки для меня, я их забираю. Когда пакет документов собран, наши отношениоя закончены. Пакеты документов разные, бумажки готовятся разное время. Я звоню тебе, ты мне звонить не можешь. Как клиент, я сам не знаю, какие документы мне нужны.



В условиях вашего бардака проще дать серверу номер клиента и пусть звонит и сообщает. Но клиент может быть выключен. Что делать с сгенерированным файлом, который никто сейчас забрать не может? Хранить ты не хочешь...



Теперь по классической схеме. Клиент первый раз встречается с сервером и получет список документов - нужна синяя бумажка, зеленая и бумажка с большой печатью. Никакого дополнительного кода на клиенте нет. Он тупой, у него есть список, он не понимает, что у него, но он может список прочитать. Сервер имеет много клиентов, он не хочет хранить эти списки и после первой встречи он отдает список клиенту и про него забывает.



Клиент звонит серверу и просит первую по списку синюю бумажку. Получает. Просит бумажку с печатью. Получает. Клиент не понимает, что просит, он не понимает условия генерирования файлов. Он тупой. Но это и не нужно. Эти условия понимает сервер. Он знает как получить красную бумажку, ему нужно происто это условие сказать. Он запустит поток с условием и так, просто у сервера нет всего списка, а есть конкретное задание на один файл.



Теоретически шему можно усложнить, передавая клиенту новые списки документов, которые нужны, как выясняется по ходу изготовления. Ах, вы заказали селеную бумажку. Получите как ответ и плюс дополнительный список, который нужно приобщить к основному. Сервер опять не генерирует кучу файлов, которе никто не готов забирать. Он генерирует один конкретно запрошенный файл и дополнительно сообщает, какие файлы клиенту еще нужны. А не пристает к клиенту, который может вообще передумал после синек бумажки, отрубился от инета и бухает.



#69 
koder
патриот03.09.20 14:07
koder
NEW 03.09.20 14:07 
в ответ koder 03.09.20 14:02

Ты же пытаешься взять готовый процесс изготовления файлов и в конце каждой генерации втиснуть какой то костыль, который заменит сохранение файла на его отпрывку клиенту. Так в вебе не работает. Архитектура для десктопового процесса, а не для процесса, где в любой момент связь может прерваться и адресат будет недоступен и две стороны процесса связать вместе уже проблема.

#70 
Murr
патриот03.09.20 15:03
Murr
NEW 03.09.20 15:03 
в ответ koder 03.09.20 14:02

Как клиент, я сам не знаю, какие документы мне нужны.

-----

Я, как Сервер, тоже не знаю какие документы тебе нужны.

Я знаю, что от тебя придет какой-то документ. В зависимости от того что там будет надо будет выбрать некоторые формы и отдать их свободным клеркам на заполнение. По мере того как клерки будут их заполнять они будут отдавать их тебе и освободившись брать у меня другую форму.

Проблема - когда Я отдам последнюю форму свободному клерку - могу сказать тебе - У меня все. Но это не означает что у тебя все.


Что делать с сгенерированным файлом, который никто сейчас забрать не может?

-----

Не генерировать.

Это не проблема - просто не запустится очередной поток...



и получет список документов - нужна синяя бумажка, зеленая и бумажка с большой печатью.

------

Ну давай попробуем.

Ты - Сервер. Тебе от меня пришел какой-то документ. В каком формате - ты не знаешь.

Пожалуйста, предоставь список документов. безум



у него есть список, он не понимает, что у него, но он может список прочитать

-----

Ну, допустим, каким-то чудом удалось построить список.

Что с ним делать?

Запросить файлик?

Какой?

На Сервере файлика нет.

На Сервере есть шаблон, который породит кучу файликов. А может две и более куч - как прогер намудрит так и будет.

Дополнительно Клиенту будет нужно разбираться какой именно шаблон нужно использовать и с какими параметрами для получения конкретного файлика.

И именно эту часть Я не хочу делать на клиенте.

Клиент не будет ничего знать об шаблонах - его задача закинуть документ на Сервер и принять файлики.

Заметь - Я даже не прошу построить документ для Сервера - Я не знаю какой он будет.



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

-----

Именно.

Но думаю, что все же остановлюсь на ДавайСледующий() и буду как-то обходить незаконченную концовку. Хммм... может добавлю количество активных потоков к инфе об файле.

Т.е список вырожденный до одного документа и этот документ - текущий. хаха


#71 
Murr
патриот03.09.20 15:32
Murr
NEW 03.09.20 15:32 
в ответ Murr 03.09.20 15:03

В зависимости от того что там будет надо будет выбрать некоторые формы и отдать их свободным клеркам на заполнение.

------

Не так.

Клерки будут получать названия списков в которых указаны нужные формы. Формы они получат уже не у меня.

#72 
koder
патриот04.09.20 06:55
koder
NEW 04.09.20 06:55 
в ответ Murr 03.09.20 15:03, Последний раз изменено 04.09.20 07:58 (koder)
В зависимости от того что там будет надо будет выбрать некоторые формы и отдать их свободным клеркам на заполнение. По мере того как клерки будут их заполнять они будут отдавать их тебе и освободившись брать у меня другую форму.

Ладно. Судя по всему вы замутили единый и неделимый процесс генерации. Который один раз стартовав, нужно довести до конца. А передовать хотите промежуточные результаты, которые возникают в середине пеоцесса. Это архитекторная ошибка. Теперь ты пытаешся в этот процесс протиснуться и создать события - документ готов, заберите кто нибудь. А забирать некому. Потому что по классической схеме "вопрос-ответ" клиент может получить только один ответ. Либо все документы разом либо ничего. Сервер не может ничего ни передать клиенту ни сообщить. Только предоставить в распоряжение.



Поэтому придется извращаться.



У тебя реально 3 варианта.
1. Дождаться конца процесса и передать все документы разом.
2. поднимать сервер на клиенте
3. менять процесс генерации, разбивать его на этапы и инизиализировать каждый этап запросом с клиента с забором результатов предыдущего этапа.

#73 
uscheswoi_82
завсегдатай04.09.20 07:25
NEW 04.09.20 07:25 
в ответ Murr 29.08.20 16:21, Последний раз изменено 04.09.20 07:36 (uscheswoi_82)
Клиент делает ОДИН запрос.В ответ на запрос Сервер генерирует и отдает несколько (сотен/тысяч?) файлов.Время генерации файлов неопределено.

А RabbitMQ https://ru.wikipedia.org/wiki/RabbitMQ или MemCached https://ru.wikipedia.org/wiki/Memcached подойдёт?

Короче если нет вариантов, то нужно делать для веб. А это https://stackoverflow.com/questions/18451856/how-can-i-let... подойдёт? Ну сотни не получиться, но 5-10 файлов можно сгенерировать. Можете генерировать и запихивать их в очередь, динамически добавляя:

var last=0; var tm = setInterval(() => { window.open('file' + last + '.txt'); last++; }, 10*1000); } когда не надо то делаете clearInterval(tm);

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
#74 
uscheswoi_82
завсегдатай04.09.20 07:47
NEW 04.09.20 07:47 
в ответ uscheswoi_82 04.09.20 07:25, Последний раз изменено 04.09.20 07:51 (uscheswoi_82)

SOAP не популярна, т.к. можно к СУБД подключаться через TCP/IP - https://www.connectionstrings.com/. Зачем сериализовать и передовать что-то? Только один раз в жизни работал с SOAP, и то только чтобы взяли на работу.

Тут либо тонкий клиент-сервер, или клиент веб браузер-HTTP сервер

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
#75 
koder
патриот04.09.20 08:02
koder
NEW 04.09.20 08:02 
в ответ uscheswoi_82 04.09.20 07:47
т.к. можно к СУБД подключаться через TCP/IP

За такое нужно убивать на месте. Вы хотите запустить клиента в свою базу данных? В серверную базу напрямую? Это то же самое, что продавая на ебее старую майку, вы вместо майки высылаете ключи от дома по принципу "зайди когда удобно и возьми"

#76 
koder
патриот04.09.20 08:13
koder
NEW 04.09.20 08:13 
в ответ uscheswoi_82 04.09.20 07:25
А RabbitMQ https://ru.wikipedia.org/wiki/RabbitMQ или MemCached https://ru.wikipedia.org/wiki/Memcached подойдёт?

Для чего? Понимаете, это технологии, которые решают конкретные задачи. Могут и подойти, если вы распишите процесс и укажете, как можно использовать очередь сообщений или кэш. То есть для решения проблеммы мурра недостаточно сказать "а захреначим синюю ленту". Нужно расписать процесс пошагово и обьяснить, что на каждом этапе будет происходить. А уже потом для этого процесса подбирать конкретные технологии или программы.

И да, весь процесс. От первого запроса клиента до получения клиентом всех файлов.

#77 
uscheswoi_82
завсегдатай04.09.20 08:21
NEW 04.09.20 08:21 
в ответ koder 04.09.20 08:02
Вы хотите запустить клиента в свою базу данных?

Раньше я работал с базой данных, которая находилась на сервере в несколько сотен киллометров от моего дома, в чём проблема? Там можно пользователей добавить и права назначить -см. https://fixmypc.ru/post/prava-v-ms-sql-i-sozdanie-polzovat.... Я запускал Visual Studio 2008 и коннектился с сервером который расположен далеко, и вуаля все таблицы которые на сервере прям в Visual Studio видел. SOAP https://ru.wikipedia.org/wiki/SOAP не преднозначена для передачи больших и бинарных файлов. В википедии https://ru.wikipedia.org/wiki/SOAP так и написано:

Сейчас протокол используется для обмена произвольными сообщениями в формате XML, а не только для вызова процедур.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
#78 
koder
патриот04.09.20 09:05
koder
NEW 04.09.20 09:05 
в ответ uscheswoi_82 04.09.20 08:21
Раньше я работал с базой данных, которая находилась на сервере в несколько сотен киллометров от моего дома, в чём проблема?Там можно пользователей добавить и права назначить

В том, что если вы даете ключи от дома в надежде, что ваши драгоценности лежат в сейфе, то это в корне неправильно. Базу просто грохнут. Клиент, который находится вне зоны доверия, должен только что то спросить у сервера в надежде, что тот ответит. Во первых безопасность. Тут без разговоров. Мы не просто не пускаем никого в конкретные таблицы или ограничиваем права. Мы вообще не подпускаем никого к базе. Мы даже не сообщаем о существовании базы.



Кроме того это неправильно архитектурно. Завтра мы откажемся от базы и будем хранить данные в памяти, на диске, в неведомой хрени. Если есть слой доступа к данным, то мы перенаправим сервер и все. Слой, как и прежде работает, но данные высасывает из другого места. Поддержка проекта. А у вас предется писать новый проект, потому что доступ к данным у вас не вшивый заменяемый слой, а краеугольный камень всего процесса.

#79 
Murr
патриот04.09.20 15:11
Murr
NEW 04.09.20 15:11 
в ответ koder 04.09.20 06:55

Это архитекторная ошибка.

-----

Попробуй предложить другое решение.

Исходные:

- Есть шаблоны, часть из которых порождает файлы..

- Какой из них когда используется зависит, в основном, от разработчика с которым не будет контакта - как напишет так напишет

- Выяснить сколько и каких файлов будет можно только в процессе выполнения.

Т.е. есть шаблоны:

- Т1,

- - Т1_1, Т1_2,

- Т2,

- - Т2_1,

- - - Т2_1_1, Т2_1_2.

Т1 может вызвать (а может и нет - внутренняя логика) Т1_1, Т1_2. Т2 =>Т2_1 =>Т2_1_1 и Т2_1_2.

Т1, Т2_1, Т2_1_2 - порождают (разные) файлы при каждом вызове.

Если этого мало - там еще по 100500 версий каждого шаблона и каждая из версий ведет себя по своему.


Судя по всему вы замутили единый и неделимый процесс генерации.

-----

Он таким был.

Я его как раз делю на элементарные, по файловые) шаги.



Поэтому придется извращаться.

-----

Исходная задача менятся не будет - любая другая схема сильно усложнит (т.е. потребует более высокой квалификации писателя шаблонов) процесс. Так что лучше Я сейчас поизвращаюсь и сделаю так чтобы потом было просто и удобно.


Теперь ты пытаешся в этот процесс протиснуться и создать события - документ готов, заберите кто нибудь. А забирать некому.

-----

Примерно так и есть.

Потому и думаю как не порождать документ пока нет на него запроса. смущ

Остановить генерацию на каком-то шаге - не проблема. Проблема будет в исчерпании выделенных ресурсов.



У тебя реально 3 варианта.

-----

Один. Третий.

#80 
Murr
патриот04.09.20 15:12
Murr
NEW 04.09.20 15:12 
в ответ AlexNek 03.09.20 13:18

Напиши одного и запихай в 100 потоков... безум

#81 
Murr
патриот04.09.20 15:17
Murr
NEW 04.09.20 15:17 
в ответ uscheswoi_82 04.09.20 07:25

то нужно делать для веб.

-----

Не вполне понимаю почему вдруг выплывает решение на яваскрипте - я нигде не говорил что клиентом будет БРОВСЕР,

#82 
koder
патриот04.09.20 16:16
koder
NEW 04.09.20 16:16 
в ответ Murr 04.09.20 15:11
Один. Третий.


Звучит логично.

#83 
Murr
патриот04.09.20 18:40
Murr
NEW 04.09.20 18:40 
в ответ uscheswoi_82 04.09.20 07:47

т.к. можно к СУБД подключаться через TCP/IP

-----

Эээ...

Такой вопросик - а как подключится к базе у которой порт закрыт файрволом?

Базы, выставленные непосредственно в инет - это такая редкая глупость...


Зачем сериализовать и передовать что-то?

-----

Эээ... научи, плс, как сразу получить нужное в нужном месте... безум

#84 
Murr
патриот04.09.20 18:46
Murr
NEW 04.09.20 18:46 
в ответ koder 04.09.20 08:13

Нужно расписать процесс пошагово и обьяснить, что на каждом этапе будет происходить.

От первого запроса клиента до получения клиентом всех файлов.

-----

+1.

Единственное - можно опускать явно тривиальные и понятные шаги.

Например - файл не пишется на диск - значит он не пишется и не надо рассматривать права доступа... безум

#85 
Murr
патриот04.09.20 18:51
Murr
NEW 04.09.20 18:51 
в ответ uscheswoi_82 04.09.20 08:21

и вуаля все таблицы которые на сервере

-----

Ну а Я законнектился на твой сервер и выполнил DROP DATABASE... смущ

#86 
AlexNek
патриот04.09.20 20:52
AlexNek
NEW 04.09.20 20:52 
в ответ Murr 04.09.20 15:12
Напиши одного и запихай в 100 потоков...

Речь вроде шла о практическом примере, а не о теоретическом.


Но похоже, ты хочешь поставить на самокат мотор от Камаза.

#87 
uscheswoi_82
завсегдатай04.09.20 22:56
NEW 04.09.20 22:56 
в ответ koder 04.09.20 09:05
Кроме того это неправильно архитектурно.

Для разных ситуациях по разному, для банков может это неправильно, а для многого остального правильно. Мне один программист (ярый фанат .net) мозги промыл так делать, как вы считаете архитектурно неправильно, он постоянно твердил про LINQ, EF, и мне все мозги поломал со своими стрелочными/лямбда функциями. Так делают в C# (во всяком случае тот программист) - https://metanit.com/sharp/entityframework/1.2.php ConnectionString хранится в файле app.config, хотя EF медленный, потом точно так-же делают и в Xcode когда создаёшь проект выбераешь с Core Data или без - https://habr.com/ru/post/436510/. Тут либо Entity Framework либо SOAP/WSDL/..., так-как те кто использует EF они не создают SQL запросы, это делает за них EF, EF либо сохранят данные которые хранятся объекты, либо создаёт лишь массив объектов с заполненными данными. А как вы делаете, оно мне реально на нервы действует, т.е. когда напишишь SOAP/WSDL/... вся энергия исчезает. А раньше то что вы называете архитектурно неправильным было очень популярным, допустим когда прям спомощью СУБД можно было создавать формы, запросы, отчёты и запускать это всё - допустим MS Access, раньше делали сетевую папку и там находилась БД, и ПО обращалась к этой сетевой папки. Самым крутым примером допустим СУБД FoxPro, допустим это в Евротоннели используется, там самая большая база данных в мире. Сейчас микросервисы актуально, а SOAP/WSDL/... устарело. Ещё конкретный правдо очень извращённый пример с MongoDB, недавно я пытался MongoDB (Mongo Shell) запустить из браузера, т.е. использовать как CGI скрипт, я пишу типа такого и сохраняю допустим как mongo.cgi, вызываю из браузера, но программа не запускается, а в консоле mongo этот код работает:

#!"C:\Program Files\MongoDB\Server\4.2\bin\mongo.exe"

print("Content-Type:text/html\n\n");

use students

db.student.find().pretty()


Но XAMPP выдаёт вот такую ошибку:

Fehlermeldung:

malformed header from script 'mongo.cgi': Bad header: MongoDB shell version v4.2.3


Должно было что-то типа такого в браузер выдать, это в консоле:

> print("Content-Type:text/html\n\n");

Content-Type:text/html


> use students

switched to db students

> db.student.find().pretty()

{

"_id" : ObjectId("5f4dceb5c6c8cbf562a5c071"),

"id" : 1,

"Firstname" : "Anton",

"Lastname" : "Popov"

}

{

"_id" : ObjectId("5f4dd01ec6c8cbf562a5c074"),

"Firstname" : "Anna",

"Lastname" : "Shyshkina",

"Gender" : "Female",

"Birthday" : "01.05.1980"

}

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
#88 
uscheswoi_82
завсегдатай04.09.20 23:01
NEW 04.09.20 23:01 
в ответ Murr 04.09.20 18:40
Эээ...Такой вопросик - а как подключится к базе у которой порт закрыт файрволом?

Обычно на серверах не закрывают файрволом, у меня был Linux сервер, я с компьютера из дома подключался к MySQL который находился на сервере за тысячу киллометров от дома, у меня Linux сервер находился почему-то в США, хотя хостинг немецкий, тоже самое с Windows сервером, я подключался спомощью Visual Studio 2008 к Windows серверу, вообще без проблем.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
#89 
AlexNek
патриот04.09.20 23:17
AlexNek
NEW 04.09.20 23:17 
в ответ uscheswoi_82 04.09.20 23:01
Обычно на серверах не закрывают файрволом

ну это наверное где то у вас тама спок

У меня дома самый обычный Синологи сервер, с которым я иногда играюсь.

Захотелось добраться до MySQL базы из .Net. Сколько мне крови выпил этот фаервол уже и не упомнить. К тому же их даже у меня дома два, еще один на роутере.


Если у Вас получилось соединение - это еще ни о чём не говорит. Может специально всё разрешили.

Если бы не было защиты, то непонятно чтобы творилось сейчас везде.

#90 
uscheswoi_82
завсегдатай04.09.20 23:32
NEW 04.09.20 23:32 
в ответ AlexNek 04.09.20 23:17, Последний раз изменено 04.09.20 23:37 (uscheswoi_82)
ну это наверное где то у вас тама

Когда покупаешь хостинг/сервер во-первых присылают все Zugangsdaten, во-вторых там есть панель, ну и в-третьих EF:

MS-SQL:

https://www.ionos.com/help/hosting/using-mssql-databases-f...

MySQL:

https://www.ionos.co.uk/help/server-cloud-infrastructure/d...

EF (пишите классы, выносите connectionstring в app.config/web.config: add name="DBConnection" connectionString="..." providerName="System.Data.SqlClient", а в конструкторе так public UserContext():base("DbConnection")):

https://metanit.com/sharp/entityframework/1.2.php

Какие вообще проблемы?

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
#91 
uscheswoi_82
завсегдатай04.09.20 23:55
NEW 04.09.20 23:55 
в ответ uscheswoi_82 04.09.20 23:32, Последний раз изменено 04.09.20 23:56 (uscheswoi_82)

Такая же фигня с HANA, вы арендуете у SAP HANA, SAP даёт вам Zugangsdaten, а вы спомощью HANA Studio (который сделан на базе Eclipse) на своём компьютере подключаетесь к их хостингу...


Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
#92 
Murr
патриот05.09.20 02:12
Murr
NEW 05.09.20 02:12 
в ответ uscheswoi_82 04.09.20 23:01

я с компьютера из дома подключался к

-----

Такие буквы как VPN тебе об чем-нибудь говорят?

#93 
uscheswoi_82
завсегдатай05.09.20 02:20
NEW 05.09.20 02:20 
в ответ koder 04.09.20 09:05
Мы вообще не подпускаем никого к базе. Мы даже не сообщаем о существовании базы.

Потому-что как я понимаю вы работаете программистом в команде над каким-то маленьким куском программы. Если вы не знаете о существование базы, значит вы занимаетесь Frontend, и значит у вас уже готовые Schnittstellen на фирме, которые сделали бакендщики до вас, правильно вы знаете только про эти Schnittstellen но вы не знаете о существование БД потому, потому-что модель БД в вашей фирме хорошая, и Schnittstellen работают точно и чётко как часы, ну и у вас просто доступа туда скорей всего из-за NDA нет - https://ru.wikipedia.org/wiki/Согл�%..., это как-бы Blackbox - https://ru.wikipedia.org/wiki/Чёрн�%..., ваша задача как понимаю, улучшать программу, и оптимизировать код скорей всего для фронтенда, ну и проверка на баги. В Berufsschule тоже был у нас Teamarbeit, я допустим программировал корзину для онлайн шопа. А щас я вот это делаю:

1)Моделирую интерфейс

2)Моделирую БД (иногда по несколько раз нужно переделовать БД), поэтому мне нужен доступ к серверу. т.к. я постоянно подправляю БД, т.к. не могу подобрать идеальный вариант

3)Программирую код

4)Пишу Help

5)Делую установщик

А насчёт ошибок, просто нужно мало кода писать, иначе как учитель говорил Redundanz, и чтобы всё было внятно, вставлять unittestы, проверять на null, проверять на регулярных вырожениях, проверки делают в классах, не зря ведь есть get-ы и set-ы в классах..., допустим к примеру есть класс User, а там допустим есть метод set_emailaddr, set_emailaddr(String strEmail), а дальше вы внутри проверяете по регулярному выражению.

P.S.:Всегда когда я проходил практику, у меня было типа такого: типа мне нужно сделать то-то и то-то для фирмы, но начальство не знает как это сделать, мои начальники намекали типа догодайся с трёх раз сам, либо спроси у других... И ТС наверное тоже дали задание типа сделать файлообменник спомощью SOAP/WSDL/WCF/... но догадайся как, некоторые начальники сильно много требуют, то что многим программистам не под силу, хотят платить мало а требуют очень много, и ещё сами Kunden ничего не знают, вот яркий пример, вот рисунок - https://www.programmwechsel.de/lustig/management/schaukel-... Kunde объяснил что нужно качель с тремя седушками, а на самом деле Kunde хотел чтобы вместо седушки была шина. Меня всегда заставляли сделать бюджетный вариант, и чтобы сам от А до Я сделал, и чтобы программа сама всё за пользователя делала. Ну и в разных языках по разному, допустим тот программист который промыл мне мозги с лямбдами, EF, LINQ. У него весь код в LINQ, и в лямбдах.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
#94 
uscheswoi_82
завсегдатай05.09.20 02:38
NEW 05.09.20 02:38 
в ответ Murr 05.09.20 02:12, Последний раз изменено 05.09.20 03:24 (uscheswoi_82)

Знаю что это, но у вас в задание не было написано про VPN, но у вас там говорилось про клиент и сервер.

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

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
#95 
AlexNek
патриот05.09.20 12:28
AlexNek
NEW 05.09.20 12:28 
в ответ uscheswoi_82 04.09.20 23:32
When your server is delivered, no external access to the MySQL server is possible... through the default port for MySQL (3306).

На это Вы конечно внимания не обратили. Не пишут гады, что фаервол стоит, значит нет.

Ну а обсуждать тех кто использует подобный доступ к базе для профессионального использования мне как то даже и не хочется.

#96 
AlexNek
патриот05.09.20 12:34
AlexNek
NEW 05.09.20 12:34 
в ответ uscheswoi_82 05.09.20 02:20
Мы вообще не подпускаем никого к базе.
Если вы не знаете о существование базы, значит вы занимаетесь Frontend

Тоже не совсем правильно поняли.

Вот я вам дам адресс, логин и пароль от базы оракла, например.

Подключаетесь - всё нормально. Только вот незадача базы и таблиц там нет, ничего не показывает. Хотя прога данные показывает.

#97 
MrSanders
коренной житель05.09.20 13:02
NEW 05.09.20 13:02 
в ответ AlexNek 05.09.20 12:28, Последний раз изменено 05.09.20 13:07 (MrSanders)
Ну а обсуждать тех кто использует подобный доступ к базе для профессионального использования мне как то даже и не хочется.

Ну почему же. Просто глупости за котиком повторять не надо.

В чём проблема открыть порт на сервере, с шифрованием трафика TLS и аутентификацией по клиентскому сертификату, ну или керберосом?

На вопрос "зачем": клиенту продаётся "сервис". Он устанавливает у себя на своём сервере написаное вами веб-приложение, которое лезет к вашей центральной БД (распределенной, отзеркаленой, не суть важно, главное что БД хостите вы). В настройках своей локальной копии приложения клиент может прописывать нужные ему SQL запросы. Заставлять клиентов для этого настраивать VPN (и пускать их в вашу сеть) - глупо. Во всех СУДБ есть свои настройки авторизации, если что-то пользователю надо запретить - запретим. Так что таблицу или всю базу такой внешний пользователь не дропнет, прав нет. От DDOSа прикроемся фаерволлом, ограничив количество запростов на соединение из подсети.

Зачем мне ещё как-то закрывать базу, постоянно дорабатывая эту обёртку под желания клиентов, или, например, придумывать для них свой DSL чтобы они не баловались с SQLем, если максимум что они могут мне испортить - загрузить мою БД тупым запросом? (ну так я в настройках отсеку все планы, которые, например, дольше 5 секунд выполняются).

#98 
Murr
патриот05.09.20 13:35
Murr
NEW 05.09.20 13:35 
в ответ uscheswoi_82 05.09.20 02:20

Если вы не знаете о существование базы, значит вы занимаетесь Frontend

-----

С чего вдруг такой вывод?

Тем более, что Кодер уже написал - имеется отдельный уровень для изоляции от фактической реализации способа хранения.


У него весь код в LINQ, и в лямбдах.

------

И что?

Код в ЛИНКе и лямбдах - значит имеются "бины" для данных выбираемых из базы. Они проверены, отлажены, функционируют корректно и, как правило, лежат в отдельной сменной либе.

Остальной код - гораздо компактнее, чем без ЛИНКа и лямбд - там остается менее 20% от обычного спагетти и понять его функциональность много легче.

Сменишь структуру базы - обновишь либу - больше прогеру делать ничего не надо - все будет работать.

Сменишь СУБД без изменения структуры базы - вообще ничего кроме конфига менять не надо...



просто нужно мало кода писать

-----

Нужно, однако, правильно понимать то, что говорит учитель.

Написать мало кода можно когда у тебя база из 5-10 таблиц.

Когда у тебя база в которой 1400 таблиц и она жестко слинкована и пользует данные из другой в которой еще 1000 таблиц - мало кода не будет по определению.

Кода будет много. А раз его будет много - надо писать так, чтобы изменения в одной части не затрагивали все остальное и чтобы части были простыми, понятными и заменяемыми.


Попробуй ответить на простой вопрос:

- у тебя большая база и в базе много реляций.

- у тебя кучка (скажем пару тысяч) небольших программ, работающих с базой.

- у тебя задание - поменять (или добавить/удалит') имя одного поля.

Сколько времени ты будешь делать эту работу?

В сколь-нибудь серьезной конторе на 15-й минуте невыполнения задачи тебя нужно увольнять...


#99 
Murr
патриот05.09.20 13:38
Murr
NEW 05.09.20 13:38 
в ответ AlexNek 04.09.20 20:52

похоже, ты хочешь поставить на самокат мотор от Камаза

-----

Неа... Я к самокату пркручиваю РД-180... улыб

Murr
патриот05.09.20 13:42
Murr
NEW 05.09.20 13:42 
в ответ uscheswoi_82 05.09.20 02:38

у вас в задание не было написано про VPN, но у вас там говорилось про клиент и сервер

-----

Так мне и не надо - у меня чистая Клиент-Серверная реализация и есть ли где-то какая-то база - никому не сообщается и никакого прямого доступа не предоставляется.

Murr
патриот05.09.20 14:13
Murr
NEW 05.09.20 14:13 
в ответ MrSanders 05.09.20 13:02

настраивать VPN (и пускать их в вашу сеть)

----

Ээээ... а с чего это вдруг база обязательно лежит в нашей сети? смущ

Нам к ней по ВПНу никак нельзя? Только для клиентов, да? безум



В чём проблема открыть порт на сервере

-----

В формулировке. Опущено - для публичного доступа. Добавь и все прояснится.

koder
патриот05.09.20 20:31
koder
NEW 05.09.20 20:31 
в ответ uscheswoi_82 04.09.20 22:56
мне все мозги поломал со своими стрелочными/лямбда функциям


Нет. Архитектура это другое. Правильная архитектура это не язык и даже не технология. Это проект, в котором потребовалось от базы данных отказаться и данные через другой протокол получать- упс, переключил, готово. Потребовалось масштабировать, потребовалась другая графическая оболочка, потребовалось только отдельные модули- упс все есть, все работает. Проблем с развитием и поддержкой нет. Это важно для проектов, которые развиваются годами и их поддерживают не те прогнозы, кто писали

koder
патриот05.09.20 20:36
koder
NEW 05.09.20 20:36 
в ответ uscheswoi_82 05.09.20 02:20
Если вы не знаете о существование базы


Вы не поняли. Я знаю. Но клиент, который хочет получить данные, не имеет права знать. Завтра фирма, пишущая эту базу будет перекуплена, эту базу перестанут развивать и заказчик перейдет на другую базу данных. Я поменяю строку соединения. А что будете делать вы?

AlexNek
патриот05.09.20 20:37
AlexNek
NEW 05.09.20 20:37 
в ответ Murr 05.09.20 13:38
Неа... Я к самокату пркручиваю РД-180..

Ну да, с вертикальным взлётом и водитель без парашюта. спок Потому как не поможет.

AlexNek
патриот05.09.20 20:40
AlexNek
NEW 05.09.20 20:40 
в ответ MrSanders 05.09.20 13:02
На вопрос "зачем": клиенту продаётся "сервис"

одному клиенту еще можно как то продать. По определению Задорнова - это должен быть обязательно американец.

А вот с сотней придется повозится когда базу надо будет править.

AlexNek
патриот05.09.20 20:44
AlexNek
NEW 05.09.20 20:44 
в ответ Murr 05.09.20 13:35
- у тебя задание - поменять (или добавить/удалит') имя одного поля.Сколько времени ты будешь делать эту работу?В сколь-нибудь серьезной конторе на 15-й минуте невыполнения задачи тебя нужно увольнять...

Ну давай, удали мне поле "ид". Пошел отсчёт времени бебе


uscheswoi_82
завсегдатай05.09.20 22:24
NEW 05.09.20 22:24 
в ответ Murr 05.09.20 13:35
- у тебя задание - поменять (или добавить/удалит') имя одного поля.

В реляционной СУБД может будет и сложно, но в ООЯП есть сериализация, можно сериализовать объекты и зафигачить их в БД, я раньше сериализовал и сохранял объект прям в БД т.е. в определённое поле, потому-что я зашёл в тупик. Когда я показал такое, меня назвал один программист что я извращенец. Мне идея пришла когда я делал портал недвижимости и работал с реляционной СУБД, а в NoSQL вообще проблем нет, допустим в MongoDB там данные ввиде JSON - https://ru.wikipedia.org/wiki/MongoDB.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
uscheswoi_82
завсегдатай05.09.20 22:42
NEW 05.09.20 22:42 
в ответ uscheswoi_82 05.09.20 22:24, Последний раз изменено 05.09.20 23:48 (uscheswoi_82)

Я глянул вот этот код https://docs.mongodb.com/manual/reference/method/db.collec...

То что было в примере я взял, а потом update немного изменил, дал такую комманду:

> db.books.update({ _id: 1 },{$set: {"kazyavka":"3"}})

а потом

> db.books.find()

{ "_id" : 1, "item" : "TBD", "stock" : 0, "info" : { "publisher" : "1111", "pages" : 430 }, "tags" : [ "technology", "computer" ], "ratings": [ { "by" : "ijk", "rating" : 4 }, { "by" : "lmn", "rating" : 5 } ], "reorder" : false, "kazyavka" : "3" }

она добавила новое поле kazyavka, и присвоело значение 3. Тоже самое можно сделать в реалиционной базе данных, если создать класс в программе, потом создать объект, и его заполнить, и потом сериализовать и сохранить в поле.

Вот пример сериализации на Java - http://www.java2s.com/Code/Java/Database-SQL-JDBC/Howtoser..., вот сериализация на C# - https://stackoverflow.com/questions/1212555/serialize-c-sh....

И ещё я старался базу данных использовать только для поиска, а не для отображения данных, допустим пример с порталом по недвижимости, после сохранения я генерировал статический HTML файл,зачем сервер нагружать, пусть страницей статической будет. Т.е. пользователь ищет, и при нажатие переходит по ссылке на html файл.

P.S. В MongoDB вместо Join аггригации - https://docs.mongodb.com/manual/reference/operator/aggrega...

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
AlexNek
патриот05.09.20 23:36
AlexNek
NEW 05.09.20 23:36 
в ответ uscheswoi_82 05.09.20 22:42
Тоже самое можно сделать в реляционной базе данных, если создать класс в программе, потом создать объект, и его заполнить, и потом сериализовать и сохранить в поле.

Сорри, не хочу говорить публично, что нужно делать с такими программистами, но как ни странно, бывают, попадаются.


Ну и изменить требовалось не только базу, а всё приложение.

Murr
патриот06.09.20 00:18
Murr
NEW 06.09.20 00:18 
в ответ AlexNek 05.09.20 20:44

Ну давай, удали мне поле "ид".

-----

У тебя - удалишь... ты таки жадный получаешься - не отдашь... шок

Murr
патриот06.09.20 00:28
Murr
NEW 06.09.20 00:28 
в ответ uscheswoi_82 05.09.20 22:24

можно сериализовать объекты и зафигачить их в БД

-----

Ну и каким боком это относится к изменению имени поля в базе?


Какая мне разница что именно там хранитсям если в задании написано:

- в таблице АБЦ1400 поменять поменять имя поля с '_1234567890a' на '_0987654321b'

- обеспечить работоспособность программного комплекса после смены имени поля.


Сколько ты будешь заниматься такой задачей?

uscheswoi_82
завсегдатай06.09.20 01:09
NEW 06.09.20 01:09 
в ответ Murr 06.09.20 00:28, Последний раз изменено 06.09.20 01:31 (uscheswoi_82)
в таблице АБЦ1400 поменять поменять имя поля с '_1234567890a' на '_0987654321b'

Ну можно сделать такую таблицу _fields: ID, FieldName - кастомное поле, FieldValue - значение.

А дальше UPDATE SET _fields FieldName='_0987654321b' WHERE FieldName='_1234567890a'

Допустим есть таблица Person: PersonID, Firstname, Lastname, Gender. И допустим вы хотите кастомные поля хранить, допустим CustomFields_Person: PersonID, FieldName, FieldValue,

Допустим так:

CREATE TABLE `db1`.`person` ( `PersonId` BIGINT NOT NULL AUTO_INCREMENT , `Firstname` VARCHAR(100) NOT NULL , `Lastname` VARCHAR(100) NOT NULL , `Gender` VARCHAR(1) NOT NULL , PRIMARY KEY (`PersonId`)) ENGINE = InnoDB;

CREATE TABLE `db1`.`custom_fields` ( `PersonID` BIGINT NOT NULL , `FieldName` VARCHAR(255) NOT NULL , `FieldValue` TEXT NOT NULL ) ENGINE = InnoDB;

INSERT INTO `person` (`PersonId`, `Firstname`, `Lastname`, `Gender`) VALUES (NULL, 'Anton', 'Popov', 'm');

INSERT INTO `custom_fields` (`PersonID`, `FieldName`, `FieldValue`) VALUES ('1', 'Eyes', 'Blue'), ('1', 'Hair', 'Black');

SELECT p.PersonID, p.firstname, p.lastname, p.Gender, c.FieldName, c.FieldValue FROM `person` AS p INNER JOIN custom_fields AS c ON p.PersonID = c.PersonID WHERE p.Firstname = 'Anton'

SQL выдаст вам такой результат:

PersonID firstname lastname Gender FieldName FieldValue

1 Anton Popov m Eyes Blue

1 Anton Popov m Hair Black

Теперь не нравится имя поле Eyes пишите:

UPDATE custom_fields SET FieldName='AbraKadabra' WHERE FieldName='Eyes', теперь поле Eyes стал AbraKadabra

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
Murr
патриот06.09.20 01:27
Murr
NEW 06.09.20 01:27 
в ответ uscheswoi_82 06.09.20 01:09

Из рекомендаций мелкомягких:

Using SQL Server Management Studio

  1. In Object Explorer, connect to an instance of Database Engine.
  2. In Object Explorer, right-click the table in which you want to rename columns and choose Rename.
  3. Type a new column name.


Остается вопрос - через сколько времени после выполнения указанного выше программный комплекс будет снова работоспособным? смущ

koder
патриот06.09.20 06:12
koder
NEW 06.09.20 06:12 
в ответ uscheswoi_82 05.09.20 22:24
Когда я показал такое, меня назвал один программист что я извращенец.Мне идея пришла когда я...


Просто представьте, что вы заболели и кто то должен срочно работать над вашим проектом. Как пример, вы обслуживаете автомобиль, все классно, клиент доволен. Вдруг вы заболели, ваш коллега по мастерской , что бы устранить небольшую проблему, открывает капот, а там нет двигателя. Все. Приплыли. Да, то что вы сделали, работает. И работает не хуже остальных.Но поддерживать такой код невозможно.

koder
патриот06.09.20 06:15
koder
NEW 06.09.20 06:15 
в ответ Murr 06.09.20 01:27
Остается вопрос - через сколько времени после выполнения указанного выше программный комплекс будет снова работоспособным?

Злые вы все улыб

uscheswoi_82
завсегдатай06.09.20 06:57
NEW 06.09.20 06:57 
в ответ koder 06.09.20 06:12, Последний раз изменено 06.09.20 07:21 (uscheswoi_82)
Когда я показал такое, меня назвал один программист что я извращенец.Мне идея пришла когда я...
Просто представьте, что вы заболели и кто то должен срочно работать над вашим проектом.

Программист которому я показывал, а это уже лет 5 назад было, уже тогда не являлся программистом, он вообще живёт в России, он с айти спрыгнул (я тоже как он спрыгнул с айти, и дальний родственник немец окончил TUM на Fachinformatik Anwendungsentwicklung, а занимается веб дизайном а не программированием), сейчас этот программист который живёт в России что-то там шьёт/вяжет/плетёт и в etsy продаёт, а раньше он Spring-ом занимался. Просто скучно было мы бла-блакали с ним в соцсетях, я показал код, он поддел меня. На фирмах где я практику проходил никто ничего вообще не знал, и всем на всё всё равно было, нужно было самому догодаться. Задание даёт Projektleiter, у меня Projektleiter был не немец я его очень плохо понимал. Теперь насчёт как становятся Projektleiter-ом, допустим возьмём моего бывшего одноклассника из Berufsschule, который сначало окончил я даже не знаю с чем это даже сравнить, короче как-бы начальную школу, тобишь как понимаю 8 классов закончил, а потом может в FOS/BOS, а потом поступил в ПТУ и потом поступил работать как администратор, так-как его интересовало только администрирование, и через пару лет он дорос до Projektleiter. Как можно доверять Projektleiter-у который не в теме?

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
uscheswoi_82
завсегдатай06.09.20 07:13
NEW 06.09.20 07:13 
в ответ Murr 06.09.20 01:27, Последний раз изменено 06.09.20 11:59 (uscheswoi_82)

Современный дотнетчик предпочитает использовать EF, он предпочитает только либо Code First или Model First, а про SQL Server Management Studio он знать не желает, в Visual Studio можно подключиться к удалёной/локальной БД, но это не SQL Server Management Studio, просто когда подключаешься к SQL серверу, там слева в Visual Studio появляется список таблиц, транзакций функций, etc... так называемый Object Explorer/Server Explorer.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
AlexNek
патриот06.09.20 12:51
AlexNek
NEW 06.09.20 12:51 
в ответ Murr 06.09.20 00:18
ты таки жадный получаешься - не отдашь..

Для тэбэ дарагой ничаво не жалко, бери хоть усё Ид - один фиг пользователь их не видит. бебе

AlexNek
патриот06.09.20 12:57
AlexNek
NEW 06.09.20 12:57 
в ответ uscheswoi_82 06.09.20 07:13
Современный дотнетчик предпочитает использовать EF

откуда такая статистика?

Murr
патриот06.09.20 18:50
Murr
NEW 06.09.20 18:50 
в ответ koder 06.09.20 06:15

Злые вы все улыб

-----

А то... и ооочень злые.... просто злыдни... нее - Злыднииии!!!! хаха

Murr
патриот06.09.20 19:02
Murr
NEW 06.09.20 19:02 
в ответ uscheswoi_82 06.09.20 07:13

в Visual Studio можно подключиться к удалёной/локальной БД

-----

Ну до чего же ты упертый...


В комплекте с винды есть телнет. Цепляешься телнетом за порт 1033 и выполняешь

sp_Rename 'АБЦ1400._1234567890a', '_0987654321b', 'COLUMN'


Если не устраивает телнет - делай из Студии или из любой другой среды...

На худой конец напиши 5 строк для коннекта и выполнения команды...


Вопрос, на который требуется ответить - не как выполнить переименование,

а через какое время после выполнения переименования программный комплекс

работающий с этой базой будет полностью функционировать?..

uscheswoi_82
завсегдатай07.09.20 09:31
NEW 07.09.20 09:31 
в ответ Murr 06.09.20 19:02, Последний раз изменено 07.09.20 09:39 (uscheswoi_82)
В комплекте с винды есть телнет.

Telnet по умолчанию не установлен, опасная программа... Те кто про перенаправления ввода вывода знает (pipes), тот поймёт о чём я, и в чём опасность. В Berufsschule Putty пользовались.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнении Моя ФЛ Он и Она
Murr
патриот07.09.20 16:42
Murr
NEW 07.09.20 16:42 
в ответ uscheswoi_82 07.09.20 09:31

Вопрос, на который требуется ответить - не как выполнить переименование,

а через какое время после выполнения переименования программный комплекс

работающий с этой базой будет полностью функционировать?..

-----

Telnet по умолчанию не установлен, опасная программа...

Те кто про перенаправления ввода вывода знает (pipes), тот поймёт о чём я, и в чём опасность.

В Berufsschule Putty пользовались.

-----

У меня отпали все вопросы по поводу уровня сложности заданий которые тебе давали... улыб

weisserWolf
посетитель07.10.20 18:14
weisserWolf
NEW 07.10.20 18:14 
в ответ Murr 29.08.20 16:21

Раньше это делалось Sun RPC

Murr
патриот07.10.20 20:55
Murr
NEW 07.10.20 20:55 
в ответ weisserWolf 07.10.20 18:14

А пояснить?.. по подробнее... для кошек!!! :)

1 2 3 4 5 6 7 все