| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Распределённые приложения и сеть > передача разных запросов к базе данных по сети |
| Автор: Экскалупатор 16.4.2010, 15:39 |
| Всем привет. пишу приложение для работы с сервером SQL через сеть. схема такая: есть клиентская часть, пользователь заполняет поля в форме, жмет отправить, прога шифрует данные и отправляет их серверу. сервер расшифровывает и делает то что ему сказал клиент(выборка данных из базы, удаление, вставка новых данных, обновления), результат в шифрованном видле возвращается обратно клиенту. вопрос в том как объяснить серверу, что именно я хочу сделать с данными. отправлять сразу запрос от клиента, мне кажется как то не кошерно, придется хранить в клиенте все варианты запросов к базе, если что то менять то будет лажа, плюс отправка значений будет занимать меньше времени(кодирование/декодирование, пересылка). подскажите кто сталкивался(ну или просто у кого есть какие мысли по этому поводу) как лучше всего объяснить серверу, что делать с данными. заранее спасибо. |
| Автор: jonie 16.4.2010, 20:30 |
| мне кажется что вам надо почитать про порождающие паттерны... |
| Автор: Экскалупатор 16.4.2010, 20:42 |
| jonie, ммм, ну я несколько знаю (если, конечно, не путаю): "одиночка", "абстрактная фабрика", "Строитель" и иже с ними... Но что то никак не могу понять как ты предлагаешь мне их использовать в данной ситуации. можно пример? или теоретических рассуждений немножко... |
| Автор: Экскалупатор 18.4.2010, 10:44 |
| неужели никто не сталкивался с подобной проблемой? расскажите как решали. очень надо. |
| Автор: mihryak 23.4.2010, 22:17 |
| если коротко, то паттерн "http://design-pattern.ru/patterns/query-object.html" а подлиннее - и долго, и от кучи факторов и требований зависит мне кажется, что ты выбрал неправильный подход к задаче. ну придумаешь ты инкапсуляцию запросов в классы, чем это поможет? это избавит клиент от знания всех типов и вариантов запросов, но потребуетдать эти знания серверу в любом случае, у тебя будет пусть и расширяемый, но довольно узкий диапазон возможностей. если нужен, условно говоря, полный доступ к базе, то зачем все эти пляски с сервером и криптованием (при условии, конечно, что речь идёт о интранет-приложении)? можно возспользоваться http://support.microsoft.com/kb/316898 http://msdn.microsoft.com/en-us/library/aa302413.aspx, ограничившись одним клиентом бонусом будет халявная поддержаскульных ролей и прав юзеров, при window-аутентификации вообще делать ничего не придётся если не очень нужен, и требуется лишь доступ к определённым таблицам и определённым действиям с ними, то классический подход с доменной моделью будет в самый раз как бы то ни было, на всякий случай замечу: заниматься шифрованием коммуникации между компонентами самостоятельно удел велосипедистов, всё это делается штатными средствами wcf |
| Автор: Экскалупатор 24.4.2010, 12:47 |
может подход и не тот, но так хочет "руководство". надо что бы было шифрование при отправке данных. тут ничего не изменить. тема собсно не в этом, а в том как лучше сделать отправку данных. сразу в виде запроса, или можно как то отправлять сами данные, но тогда возникает вопрос как объяснить серверной части что с ними делать. |
| Автор: mihryak 24.4.2010, 15:13 |
| ну так работай с датасетами, соединение защищай ssl, если начальству виднее, какая должна быть архитектура |
| Автор: Экскалупатор 24.4.2010, 15:42 |
| ну зачем же так жестоко. сразу датасетами... |
| Автор: mihryak 24.4.2010, 18:34 |
| а чего жестокого? помимо общего контейнера, готового работать с произвольными данными (т.е. по сути с базой данных), ты получишь автоматическую инкупсуляцию работы с ними т.е. пользователь выбрал таблицу, сервер (и всё же - он нужен вообще?) прислал данные, клиент их отредактировал (добавил, удалил, изменил), вызвал GetChanges() и послал изменный набор обратно. сервер их принял и перенёс с помощью адаптера изменения на реальную базу. в случае необходимости можно поиграться с изменением контроля над concurrency в результате имеем: - полное освобождение от знаний о скульных запросах на клиенте (в реальности даже скуля может не быть, хоть xml - клиент об этом не узнает) - полный контроль над изменениями на сервере (в случае необходимости) - некоторые оверхэды по объёму передаваемых данных, но, думаю, что это не будет критичным если коммуникацию с сервером сделать через wcf+ssl с windows-аутентификацией, то в результате трудозатраты сведутся практически к написанию клиентской морды, а на выходе будет вполне себе безопасное и легко администрируемое штатными средствами приложение не вижу признаков жестокости впрочем, если бы ты не партизанил, а подробней бы описал задачи и требования к системе, то и решение могло бы быть иным |
| Автор: mihryak 24.4.2010, 22:58 | ||
| ох... и к чему здесь городить все эти команды, коды и прочее? напрашивается же тривиальное клиентское API:
вся бизнес-логика на сервере, в т.ч. выборка из базы, транзакционность, всякие проверки и т.п. ещё раз повторюсь - не занимайся шифрованием, все банки (уж кто-то, а они точно тревожатся о безопасности и надёжности) используют ssl и не тревожатся на этот счёт всё это уже замечательно реализовано в wcf, причём то же шифрование транспорного уровня легко как навешивается, так и снимается познакомь начальство с http://ru.wikipedia.org/wiki/SSL, если не поймут, советую подыскать другую работу и смайлик тут просто для неформальности, сама фраза серьёзна Добавлено через 11 минут и 14 секунд в догонку если работу менять совсем уж не хочется, и при этом считаешь, что все придуманные человечеством велосипеды скучны, и очень не хватает треугольноколёсных, то можешь взять на заметку, что в стандартных (.net 2.0) веб-сервисах есть возможность получить доступ к отправляемому сообщению и, перехватив его перед отправкой, зашифровать, на сервеве же можно выполнить обратные действия, всё это будет работать в виде навешенного (и отключаемого) уровня над штатными средствами в .net 3.0 тоже можно управлять передачей сообщений в тех же целях совесть будет мешать заснуть, но начальство останется довольным если надо, могу предложить код для 2.0, для 3.0 тоже могу посмотреть, но это если не будет лениво заниматься бесполезными вещами |
| Автор: Экскалупатор 1.5.2010, 11:19 |
| mihryak, познакомил. вроде согласились. ))) возникает вопрос: если я хочу это сделать, скажем, через Remoting. то как в него добавить SSL(был бы очень благодарен за ссылку на пример или толковое описание). |
| Автор: uranpro 4.5.2010, 12:26 |
| http://msdn.microsoft.com/en-us/library/ms729700.aspx |
| Автор: mihryak 6.5.2010, 11:11 |
| Экскалупатор, я использовал ssl только в .net 2.0 web services и в wcf, так что могу только первую ссылку из гугла предложить... http://msdn.microsoft.com/en-us/magazine/cc300447.aspx есть какие-то ограничения по версии фреймворка, раз remoting предпочтителен? |
| Автор: Экскалупатор 7.5.2010, 07:49 |
| mihryak, да уже и remoting не предпочтителен. главное что бы работало быстрее. наверное все таки буду через wcf делать. осталось только в нем как следует разобраться... особенно мне не понятно как сделать сертификат. и как его передавать между клиентом и сервером. может кто знает толковый мануал по этому поводу? |
| Автор: mihryak 7.5.2010, 11:58 | ||
самодельный поулчается примерно так
лучше, конечно, купить у http://www.verisign.com/ssl/ передаются они автоматом и при хостинге сервиса в IIS'е, и при Self-hosted варианте вот несколько ссылок http://msdn.microsoft.com/en-us/library/ff648431.aspx http://www.codeproject.com/KB/WCF/WCFSSL.aspx http://www.theserverside.net/tt/articles/showarticle.tss?id=SecuringWCFService |
| Автор: Экскалупатор 7.5.2010, 19:14 |
| mihryak, спасибо, буду курить мануалы... |
| Автор: uranpro 10.5.2010, 04:02 |
| может я ошибаюсь, т.к. wcf толком не знаю, но прочитав http://msdn.microsoft.com/en-us/magazine/cc163569.aspx статью, понял, что в wcf используется xml сериализация. когда она была быстрее binary сериализации? |
| Автор: mihryak 10.5.2010, 15:00 |
| начнём с того, что wcf действительно завязана на xml, резултатом построения графа объектов, подлежащих сериализации, явдяется XML Infoset, определяющего модель данных для представления будущего сообщения но далее, помимо текстового кодирования для передачи этого сообщения, есть возможность использовать двоичное - http://msdn.microsoft.com/en-us/library/ms731802.aspx именно двоичное применяется в netTcpBinding, основное назначение которого такое же, как и у remoting (у него, прадва, используется сразу бинарная сериализация, а не только для кодирования передаваемого сообщения) кроме того, в wcf кроме стандартного DataContractSerializer'а и XmlSerializer'a, есть ещё и DataContractJsonSerializer, резудьтатом сериализации которого является json-представление объекта ну и в завершение нелишним будет упомянуть, почему в "старых" веб-сервисах и в wcf веб-сервисах используется xml (а в wcf ещё и json) - это нужно для того,чтобы клиентом могло быть любое приложение, совсем не обязательно .net, в случае json, например, им может быть обычный клиентский java script |
| Автор: uranpro 10.5.2010, 15:53 |
| спасибо за ответ, стало более яснее. я хотел сказать, что wcf не быстрее remoting. это верно? |
| Автор: mihryak 10.5.2010, 16:06 |
| я не сравнивал скорость Remoting и WCF+netTcpBinding, но подозреваю, что производительность будет сопоставима а предложение использовать wcf обусловлено прежде все кучей бонусов (тот же ssl), которые будут предоставлены "нахаляву" в wcf |