程序更新后WCF服务不工作

发布于 2024-08-03 10:37:26 字数 998 浏览 5 评论 0原文

我最近在我的程序中添加了 WCF 服务引用。当我执行该程序的全新安装时,一切似乎都按预期工作。但是,当我在已经安装了先前版本(没有新服务引用)的客户端上安装该程序时,我收到一个异常,告诉我无法找到该特定服务的默认端点。

appname.exe.config 似乎没有使用新的端点设置进行更新。这有什么原因吗?如何强制安装程序覆盖配置文件?我使用默认的 Visual Studio 2008 安装程序项目,并将“RemovePreviousVersions”设置为“True”。

更新: 我的程序在第一次运行后使用以下代码加密设置部分。

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        ConfigurationSection section = config.GetSection(sectionKey);
        if (section != null)
        {
            if (!section.SectionInformation.IsProtected)
            {
                if (!section.ElementInformation.IsLocked)
                {
                    section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
                    section.SectionInformation.ForceSave = true;
                    config.Save(ConfigurationSaveMode.Full);
                }
            }
        }

当我在安装新版本之前不运行该程序时,app.config 会更新。

I have recently added a WCF service reference to my program. When I perform a clean install of this program, everything seems to work as expected. But, when I install the program on a client which already has a previous version (without the new service reference) installed, I get a exception telling me the default endpoint for this particular service could not be found.

It seems that the appname.exe.config is not being updated with the new endpoint settings. Is there any reason for this and how can I force the installer to overwrite the config file? I'm using the default Visual Studio 2008 installer project with RemovePreviousVersions set to True.

Update:
My program encrypts the settings section after the first run with the following code

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        ConfigurationSection section = config.GetSection(sectionKey);
        if (section != null)
        {
            if (!section.SectionInformation.IsProtected)
            {
                if (!section.ElementInformation.IsLocked)
                {
                    section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
                    section.SectionInformation.ForceSave = true;
                    config.Save(ConfigurationSaveMode.Full);
                }
            }
        }

When I do not run the program before installing the new version the app.config gets updated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

临风闻羌笛 2024-08-10 10:37:26

你是对的,这是配置文件没有更新。

有几种可能:

  • 安装程序有旧版本的配置文件
  • 安装程序没有配置文件,程序在机器上使用旧版本

尝试先卸载项目,然后安装并检查配置文件是否已被删除复制进去。

You are right that it is the config file that is not updated.

There are several possibilities:

  • The installer has the old version of the config file
  • The installer does not have a config file and the program is using the old one on the machine

Try uninstalling the project first, then install and check that the config file has been copied in.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文