c# - 部署带有数据库的 C# 程序以在 LAN 上工作的建议

标签 c# database ms-access lan

我设计了一个 C# 游戏,它使用 Access .mdb 数据库文件来存储变量。

基本思路是其中一名玩家将“主持”游戏,而另一名玩家将通过连接到数据库、在数据库中读取和写入项目来加入该游戏。需要数据库在主机和客户端之间来回传递变量,并且两个程序都会定期检查数据库中的新消息/变量(是的,是的,我无法让 TCP/IP 远程处理工作)。

现在,只要客户端可以找到数据库文件,程序就可以正常工作(主要是客户端,因为主机只修改其本地数据库)。目前,客户端的连接字符串位于 .ini 文件中,为了使程序正常工作,它(或至少是服务器)必须位于 XP 机器的共享文档中,或公共(public)文档中Vista/7 机。

但后来我想到了一些问题:

  1. 如果客户端用户将其放置/安装到共享/公共(public)文档中的另一个文件夹中怎么办?我想那里有一个代码可以“钻取”共享文档文件夹以找到数据库的路径,包括共享名称……是吗?

  2. 安装呢?安装程序默认始终为“C:\Program Files\GameName”。默认情况下,是否可以将其设置(或锁定)到共享/公共(public)文档中的特定文件夹?甚至建议安装到共享文件夹,误删等问题怎么办?

  3. 比如说,默认是“C:\Program Files\GameName”。我可以看到设置的安装路径将解决任何连接问题,因为每个客户端都将在另一台计算机的相同路径中查找,无论是 XP 还是 Vista 都无关紧要。 C# 程序是否可以通过 LAN Access “C:\Program Files\GameName”,而无需任何系统修改?是否存在任何安全(UAC?)问题?

附言人们可能会发现方便的详细信息: 我正在使用 Visual Studio 2005。我的学校也是。 我正在运行 .NET Framework 2.0。我的学校也是,不幸的是,我无法改变这一点。

最佳答案

我不想告诉你这个,但这就是该方法存在根本缺陷的原因。你打算在什么时候做什么:

  • 服务器上的文件和打印共享被禁用?
  • 网络客户端在客户端计算机上被禁用?
  • 服务器配置为只允许经过身份验证的用户 Access ,而客户端没有 Access 权限?
  • 文件和打印共享因防火墙而被阻止?
  • 文件和打印共享因其他原因而完全中断?
  • 您需要服务器的管理员权限才能共享文件夹,但当前用户不是管理员?
  • Access 数据库引擎没有在服务器或客户端上正确安装?
  • 其中一个客户破坏了数据库? (这比您想象的要容易;只需要一个网络故障,即客户端暂时或永久断开与服务器的连接)。

这些是您无法使用当前解决方案解决的基本问题。

让它在正常的 TCP/UDP 端口上工作。你会过得轻松很多。有图书馆可以促进这一点,请参阅 C# Game Network Library - 例如,听起来 Microsoft 的 XNA SDK 具有游戏中的网络功能。如果你使用标准方法/标准库来实现网络,你成功的几率会高很多。使用客户端/服务器架构意味着如果客户端出错,服务器的状态不会被破坏。

我意识到这可能涉及重大重写。坦率地说,如果您希望这款游戏在没有高昂支持成本的情况下在广泛的客户群中取得商业上的成功,并且超越单纯的实验,我认为您别无选择。

关于c# - 部署带有数据库的 C# 程序以在 LAN 上工作的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8185781/

相关文章:

c# - 仅将构造函数公开给基类,可能吗?

python - 如何设计一个数据库来表示结构变化的数据?

java - Grails 框架方法 addTo 在多次调用时抛出异常

database - 在数据库列中存储分隔列表真的那么糟糕吗?

ms-access - 是否可以将二进制变量显示为数据 TableView 表单中的复选框?

c# - 在圆周上求纬度和经度给出经纬度和半径

c# - Lambda\Anonymous 函数作为参数

c# - 使用 TOP 1 插入和删除语句

sql - 使用 SQL visual basic 将日期和时间插入到 Access 中

ms-access - Microsoft Access 可以自动完成字段吗?