1

我们开发了一个用于企业环境的 .NET 4 客户端应用程序(Windows 窗体)。客户端应该以多种不同的风格发布,这让我们有些头疼。其中一项要求是客户端必须能够通过 SOAP Web 服务与许多不同的应用程序服务器进行通信。应用服务器 (AS) 发布相同的 WS 接口,但底层服务器系统不同,通常我们企业为每个客户提供一个实例。其次,我们有一个内部运营部门,该部门也必须能够访问所有这些应用程序服务器,以便为我们的客户提供支持。

网络结构是这样的,在内部,AS 服务器位于 10.0.0.0/8 网络上,而所有客户都有公共 IP 地址来访问应用程序服务器。目前,我们通过 IP 访问,但正在迁移以使用 DNS 名称,尽管服务器的 DNS 名称对于内部和外部(客户的)访问将不相同。

这样做的结果是我们在 app.config 中有很多不同的配置需要管理,因为默认情况下 WS 连接信息存储在那里。我之前发布了一个相关问题(在 app.config 中管理多个客户端端点配置(IP 地址等)的最佳方法),它帮助很大,但我们仍在努力改进配置管理。如参考帖子中所述,如果您熟悉 Maven (Java),我们现在可以为每个端点连接设置不同的配置/构建,类似于配置文件。

现在的问题是,由于我们使用 ClickOnce 部署并让用户通过 URL 安装,我们需要部署许多不同的变体,即对于单个 AS,我们至少需要两个部署/构建,一个与公共IP 端点和一个具有内部 IP 端点的端点。将此与大量 AS-server 相乘,很容易看出它需要我们处理大量构建配置。显然还有改进的余地。

我们考虑的一些想法和选择是:

  • 跳过端点配置,至少是 app.config 中的地址部分,并让用户在设置表单中对其进行软配置。我们的经验是它也不是没有问题,通常它需要对最终用户的一些支持,他们很容易出错。

  • 定制安装程序,研究是否有任何方式可以动态配置端点,例如,由于客户端应用程序将部署在发布 Web 服务的同一服务器上,安装是否可以以某种方式获取源 URL 并使用它来找到 AS 服务器?

任何关于如何改进部署过程和其他相关经验的想法都非常受欢迎。我想我们不是第一个遇到这个问题的人。

此外,如果存在更好的方法,我们愿意跳过 ClickOnce 部署。

问候, 奥拉

4

2 回答 2

3

首先,可以自定义您的 app.config,然后使用 mage.exe 自定义发布它,即您不必使用 Visual Studio 进行发布。您提到您不想发布许多不同的客户,但这些知识可能有助于您对流程的想法。

其次,我建议您发布目录服务。这是一个 Web 服务(发布到一个预先确定的位置,这意味着您可以将端点地址烘焙到您的应用程序中),您通过足够的参数来查询它以识别哪个用户/客户端正在调用,它可以返回给您您需要调用的实际 Web 服务接口的 URI。目录服务可以确定您从哪里调用(它可以确定您的 IP),因此它知道您是在内部还是外部调用,并据此返回适当的 IP。

于 2012-09-27T09:46:38.077 回答
2

我真的很喜欢 slugster 的目录服务理念。让客户询问要调用哪个服务可以让您保持灵活性,并且如果您更改某些客户需要调用的服务,您将不必重新部署客户端。

也就是说,您可能仍然有复杂的配置。这又回到了定制你的 app.config。为此,您可以使用ClickOnceMore。它是一个第三方构建工具(免责声明:我构建了它),用于在 Visual Studio 之外构建 ClickOnce 部署。更重要的是,它有一个宏系统,可让您设置多种配置。您可以从命令行构建它,指定您正在构建的配置。基于该配置,它可以替换 app.config 中的不同值,或者完全选择不同的 app.config 文件。有关宏系统的更多详细信息,请参见此处

于 2012-09-28T21:07:09.170 回答