2010-10-12 5 views
2

В настоящее время я работаю над реализацией веб-службы для комбинированного веб-приложения (т. Е. Доступа из разных источников).Доступ к базе данных в веб-службе

Теперь есть два вопроса, я не могу найти ответ на:

  1. Как получить доступ к базе данных в правильном направлении (статический класс синглтон DI??)? Я не нашел никакой информации об использовании веб-службы в контейнере DI, чтобы помочь с доступом к базе данных.

  2. Как насчет доступа к письму? Это правильный способ предложить возможность записи в базу данных? Разумеется, запросы будут защищены идентификатором пользователя и ключом.

Примечание: это НЕ wcf, а обычный веб-сервис (то есть расширение файла asmx).

+1

На самом деле, WCF _is_ «обычный» веб-сервис - ASMX теперь считается «унаследованной технологией» Microsoft. –

+0

Yup, я знаю об этом, но список известных WCF в Mono огромен. – Femaref

+1

Я проголосовал за ASMX как «нормальный», по той же причине, что и ручная коробка передач называется «стандартной». – MusiGenesis

ответ

1

Существует множество «правильных» способов доступа к базе данных из веб-службы. Лично я часто использую ADO.NET внутри статического класса (или, точнее, класса с кучей статических методов), который обычно возвращает DataTable (завернутый в DataSet, который может быть сериализован и таким образом легко возвращен из веб-службы). Вы также можете использовать ORM (например, NHibernate), хотя они, как правило, имеют большие накладные расходы, чем ADO.NET и, таким образом, являются потенциальным источником проблем с нагрузкой на вашем сервере.

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

+0

Как вы решаете одновременный доступ к записи? просто используйте транзакцию в ado.net? – Femaref

+0

Параллельные записи не являются особенно сложными в ADO.NET. У вас может быть ситуация, когда последующий пользователь перезаписывает данные предыдущего пользователя, но это не является проблемой, характерной для ADO.NET или веб-служб. – MusiGenesis

+0

Я согласен с Musi: до тех пор, пока вы в порядке с функциональностью «last in wins», одновременная запись не должна быть проблемой. Однако, если ваши требования таковы, что «последний в выигрыше» будет проблематичным, вы захотите изучить методы для оптимистической блокировки или пессимистической блокировки. Независимо от того, какую схему блокировки вы реализуете, она будет более сложной, чем простой подход, основанный на последствиях. – mikemanne

Смежные вопросы