【问题标题】:How do I deal with connection strings in a Click-Once application?如何处理 Click-Once 应用程序中的连接字符串?
【发布时间】:2010-03-15 16:31:39
【问题描述】:

我正在考虑构建一个 Click-Once 应用程序,并试图围绕如何处理整个连接字符串问题展开思考。问题如下:

我想使用 EF 直接从每个客户端获取数据,因此要求每个客户端都配置一个连接字符串(这不是问题)。如何处理与正在查询的 SQL Server 不在同一个域中的客户端?换句话说,如果我尝试在家而不是在工作中运行我的应用程序,我的连接字符串应该是什么样的?我是否需要以不同方式配置我的 SQL Server 以允许这种情况?

提前致谢!

【问题讨论】:

    标签: .net sql-server entity-framework clickonce connection-string


    【解决方案1】:

    此问题不限于 ClickOnce,它是一般网络问题。

    第一个问题是:你能从家里访问 SQL Server 吗?

    如果 SQL Server 在公司内部网络上,答案很可能是“否”。您需要设置 VPN 才能访问服务器。如果您设置了 VPN,那么您应该能够在家中使用相同的连接字符串,只要您完全限定服务器名称,即 SqlServer.mycompany.local 而不是 SqlServer。您可能会使用域凭据连接到 VPN,因此您可以使用相同的连接字符串。

    但更好的方法是使用包装器,例如 WCF Data Services。这将通过 Web 服务 (WCF) 公开数据并为您提供很多功能 - 您可以针对它编写 Linq 以及所有内容。从长远来看,如果您希望远程使用该应用程序,这可能会更容易使用。

    在我们的例子中,我们实际上有业务服务 - 一个相当大的 API,它通过 Web 服务提供业务逻辑,而不仅仅是包装数据库表(如果您愿意,可以将其称为 SOA)。从超长期来看,这是最佳选项,因为它抽象了一个逻辑 API 而不是数据库,但如果您正在寻找快速修复,WCF 数据服务可能是解决问题的方法去吧。

    【讨论】:

    • +1 数据服务很可能是我最终会使用的 - 谢谢!
    【解决方案2】:

    您打算如何对家庭用户进行身份验证?在域中,您可以使用集成身份验证检查用户帐户权限,因此连接字符串本身不包含凭据。对于域外的用户,我认为这是不可能的。

    我认为您需要将数据库包装在 Web 服务后面,该 Web 服务支持基于非域的身份验证方案。远程用户访问的不是数据库。

    【讨论】:

      【解决方案3】:

      使用 SQL 身份验证。这将适用于跨域。

      【讨论】:

        【解决方案4】:

        虽然 SQL 身份验证可以工作,但您需要为 SQL 服务器上应用程序的每个用户设置不同的用户/密码组合。不是理想的或易于维护的情况。

        您最好的选择是根本不连接到数据库。相反,构建一个安全的 Web 服务,您的应用程序调用该服务来获取其数据。然后可以通过 Windows 或用户名/密码身份验证(可以针对 AD 域进行验证)来保护该 Web 服务。

        【讨论】:

          【解决方案5】:

          如果无论客户端在哪里(即您的家、客户的办公室),SQL Server 都可以在相同的主机名上路由 - 我猜您已经设置了某种 VPN 或 DMZ,以便您的 SQL 服务器可以访问在您的办公楼之外 - 然后您可以将连接字符串留在您的应用程序中并使用 SQL 身份验证(这是用户名/密码与 Windows 身份验证。)

          如果您的 SQL 服务器需要不同的连接字符串(例如,在工作中通过 sql.internal.domain.com 访问它,在工作之外通过 sql.external.domain.com 访问),那么您将需要某种选择机制,用户可以在其中选择哪个连接在登录前使用 - 在您的应用程序中包含所有可能的连接字符串。

          您还可以做一些时髦的事情,例如使用 IP 地址来确定要使用哪个连接字符串(例如,如果当前 PC 的 IP 地址在 172.40.10.1 - 172.40.10.254 范围内)然后连接到 sql.internal.domain.com,否则 @ 987654324@。当然,这更难维护。

          编辑

          正如其他人所建议的那样,网络服务也可以在这里获得红利。

          【讨论】:

            猜你喜欢
            • 2010-10-27
            • 1970-01-01
            • 2013-07-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-31
            • 1970-01-01
            相关资源
            最近更新 更多