为ClickOnce部署自定义app.config

时间:2012-09-27 09:32:50

标签: .net clickonce

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

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

这样做的结果是我们在app.config中有很多不同的配置来管理,因为默认情况下WS-connection信息存储在那里。我之前发布了一个相关的问题(The best way to manage multiple client endpoint configurations (IP-address etc) in app.config)并且它有很大的帮助,但我们仍在尝试改进配置管理。如引用的帖子中所述,如果您熟悉Maven(Java),我们现在可以为每个端点连接设置不同的配置/构建,类似于配置文件。

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

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

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

  • 自定义安装程序,研究端点是否可以动态配置,例如由于客户端应用程序将部署在与发布Web服务相同的服务器上,因此安装可以以某种方式获取源URL并使用它来定位AS服务器吗?

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

此外,如果存在高级方法,我们愿意跳过ClickOnce部署。

问候,奥拉

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

我真的很喜欢slugster的目录服务。让客户询问要拨打哪个服务可以保证您的灵活性,并且如果您更改了某些客户需要调用的服务,则会阻止您重新部署客户端。

那就是说,你可能仍然有复杂的配置。这又回到了自定义app.config。为此,您可以使用ClickOnceMore。它是第三方构建工具(免责声明:我构建它),用于在visual studio之外构建ClickOnce部署。更重要的是,它有一个宏系统,允许您设置多个配置。您可以从命令行构建它,指定您正在构建的配置。根据该配置,它可以替换app.config中的不同值,或者只选择一个不同的app.config文件。有关宏系统的更多详细信息,请参阅here