Рекомендации по развертыванию программы C # с базой данных для работы по локальной сети - PullRequest
1 голос
/ 18 ноября 2011

Я разработал игру на C #, в которой для хранения переменных используется файл базы данных Access .mdb.

Основная идея заключается в том, что один из игроков будет «хостить» игру, а другой игрок присоединится к указанной игре, подключившись к базе данных, считывая и записывая предметы в базу данных. База данных необходима для передачи переменных хосту и клиенту, и обе программы регулярно проверяют базу данных на наличие новых сообщений / переменных (да, да, я не смог заставить работать TCP / IP Remoting).

Теперь программа работает нормально (в основном клиент, поскольку хост изменяет только свою локальную базу данных), пока клиент может найти файл базы данных. В настоящее время строка подключения для клиента находится в INI-файле, и для работы программы она (или, по крайней мере, сервер) должна находиться в общих документах компьютера с XP или в общих документах Vista / 7 автомат.

Но потом у меня возникли вопросы:

  1. Что если пользователь клиента поместит / установит его в другую папку в общих / общих документах? Я предполагаю, что есть код, который может «просверлить» в папках Shared Documents, чтобы найти путь к базе данных, включая имена общих ресурсов ... есть?

  2. А как насчет установки? Установщик по умолчанию всегда "C: \ Program Files \ GameName". Может ли он быть установлен (или заблокирован) для определенной папки в общих / общих документах по умолчанию? И даже рекомендуется ли устанавливать его в общую папку, что с такими проблемами, как случайное удаление?

  3. Скажем, по умолчанию это "C: \ Program Files \ GameName". Я мог видеть, что установленный путь установки решит любые проблемы с подключением, поскольку каждый клиент будет смотреть по тому же пути другого компьютера, и не будет иметь значения, будет ли это XP или Vista. Может ли "C: \ Program Files \ GameName" быть доступным для программы на C # по локальной сети без какой-либо модификации системы? Есть ли проблемы безопасности (UAC?)?

P.S. Детали, которые люди могут найти полезными: Я использую Visual Studio 2005. Как и моя школа. Я использую .NET Framework 2.0. Такова и моя школа, и, к сожалению, я не могу это изменить.

Ответы [ 3 ]

2 голосов
/ 18 ноября 2011

Я не хочу вам этого говорить, но именно поэтому подход в корне ошибочен.Что вы будете делать, когда:

  • Общий доступ к файлам и принтерам на сервере отключен?
  • На клиентском компьютере сетевой клиент отключен?
  • сервер настроен на разрешение только авторизованных пользователей, а клиент не имеет доступа?
  • Общий доступ к файлам и принтерам заблокирован из-за брандмауэра?
  • Общий доступ к файлам и принтерам полностью заблокирован для другихпричины кто-знает-почему?
  • Вам нужен доступ администратора на сервере для общего доступа к папке, но текущий пользователь не является администратором?
  • Не правильно установлен механизм базы данных Access насервер или клиент?
  • Один из клиентов портит базу данных?(Это проще, чем вы думаете; все, что нужно, это сбой сети, когда клиент временно или постоянно отключается от сервера).

Это фундаментальные проблемы, которые вы не можете решить с помощью текущегорешение.

Получите его работу через обычные порты TCP / UDP.Вам будет намного легче.Для этого есть библиотеки, см. C # Game Network Library - например, похоже, что Microsoft XNA SDK имеет функции для создания сетей в игре.Если вы используете стандартный метод / стандартную библиотеку для реализации сети, ваши шансы на успех гораздо выше.Использование архитектуры клиент / сервер означает, что состояние сервера не будет повреждено, если клиент выйдет из строя.

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

2 голосов
/ 18 ноября 2011

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

Используйте либо SQL Express, либо SQL CE, для которого не требуются установленные двоичные файлы базы данных (все они могут быть включены в папку приложений).Таким образом, БД останется в папке приложений (в идеале app_Data), и .Net включит поддержку баз данных в этой папке.

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

http://blogs.msdn.com/b/sqlservercompact/archive/2011/01/12/microsoft-sql-server-compact-4-0-is-available-for-download.aspx

0 голосов
/ 18 ноября 2011

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

Я бы посоветовал вам заменить все ваши файловые операции ввода-вывода слоем доступа к звуковым данным.Это избавит вас от всех проблем с «общим доступом», которые вы испытываете, от блокировки файлов, слишком сложного процесса установки и т. Д.

В качестве альтернативы SQL Server Express, как указано выше, вы также можете использовать SQLite http://code.google.com/p/csharp-sqlite/

...