2012-09-27 66 views
0

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

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

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

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

一些我们认为的想法和选项有:

  • 跳过端点配置,至少在app.config中的地址部分,并有通过在设置形式向用户柔软配置。我们的经验是,它也不是没有问题,通常它需要对最终用户提供一点支持,并且他们很容易出错。

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

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

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

问候,奥拉

回答

3

所有有可能首先来定制您的app.config,然后用定制发布mage.exe它,即你没有使用Visual Studio做出版。你提到你不想发布许多不同的客户,但这些知识可能有助于你对这个过程的想法。

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

+0

嗨,谢谢你的回答。您对目录服务的想法是我们考虑过的,并且仍然是候选人。再次感谢您的意见。 –

1

我真的很喜欢slugster的目录服务的想法。让客户端询问要调用哪个服务可以让您灵活,并且在您更改某些客户需要调用的服务时将阻止您重新部署客户端。

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