关于部署带有数据库的C#程序以在局域网上工作的建议

本文关键字:程序 局域网 工作 部署 数据库 于部署 | 更新日期: 2023-09-27 18:15:18

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

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

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

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

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

  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。我的学校也是如此,不幸的是,我无法改变这一点。

关于部署带有数据库的C#程序以在局域网上工作的建议

我不想告诉你这一点,但这就是为什么这种方法存在根本缺陷的原因。当

  • 是否禁用服务器上的文件和打印共享
  • 客户端计算机上的网络客户端已禁用
  • 服务器被配置为只允许经过身份验证的用户,而客户端没有访问权限
  • 文件和打印共享因防火墙而被阻止
  • 文件和打印共享完全被其他人取消了,谁知道为什么呢
  • 您需要对服务器进行管理员访问才能共享文件夹,但当前用户不是管理员
  • Access数据库引擎没有正确安装在服务器或客户端上
  • 其中一个客户端损坏了数据库?(这比你想象的要容易;只需出现网络故障,客户端就会暂时或永久地与服务器断开连接(

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

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

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

清除访问数据库。所描述的体系结构已经是"用户不友好"的

使用不需要安装数据库二进制文件的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

我认为使用Access没有什么意义,除非你想使用任何漂亮的基于表单的IO,你可以使用它的设计器。我怀疑这里会是这样。

我鼓励你用一个声音数据访问层来替换所有的文件IO。这将使您摆脱所有正在经历的"共享"问题、文件锁定、过于复杂的安装过程等。

除了上面建议的SQL Server Express之外,您还可以使用SQLitehttp://code.google.com/p/csharp-sqlite/