在运行时端点更改后连接到WCF服务

本文关键字:连接 WCF 服务 运行时 端点 | 更新日期: 2023-09-27 18:18:59

我正在创建一些身份验证表单,其中用户必须定义WCF服务IP,用户名和密码。

在创建与service的连接之前,用户输入的端点IP地址被保存到app.config文件中。请看下面的代码:

         Configuration configFile = ConfigurationManager.
                                     OpenExeConfiguration(ConfigurationUserLevel.None);
         ServiceModelSectionGroup serviceSection = ServiceModelSectionGroup.
                                                      GetSectionGroup(configFile);
        ClientSection clientSection = serviceSection.Client;
        Uri uri = clientSection .Endpoints[0].Address;
        UriBuilder builder = new UriBuilder(uri);
        builder.Host = ServerIP;
        clientSection .Endpoints[0].Address = builder.Uri;
        configFile.Save(ConfigurationSaveMode.Modified);

第一次连接到WCF时,一切正常,也就是说,如果IP正确,则验证用户,如果不正确,则显示相应的消息。

但是,如果第一次连接后服务的端点IP发生了变化,并且客户端对象被重新创建,它将尝试使用以前的IP地址连接到服务,而不是新的IP地址。

我尝试像这样直接为服务设置新的端点:

          ServiceClient client = new ServiceClient();
          client.Endpoint.Address = new_uri_address;

但没有成功。

我想知道为什么会发生这种情况,我如何才能正确地为WCF客户端分配新的端点?

在运行时端点更改后连接到WCF服务

app.config是在程序首次加载时读取的。您的更改将不会生效,除非您终止应用程序并重新启动它。为了克服这个问题,您应该从代码中完全定义和配置wcf客户机。至少这是对我有效的方法。我可以提供完整的例子,如果需要

为了能够连接到服务,客户端需要三条信息——地址、绑定和契约。您可以尝试通过代码设置这些,并检查是否使用了新的ip地址。看看这个解决方案:在wcf客户端中动态设置端点地址(使用net tcp绑定)

再次感谢您的回答。我通过定义绑定和端点重新创建了wcf客户端,它工作了。

    Configuration configFile = ConfigurationManager.
                                 OpenExeConfiguration(ConfigurationUserLevel.None);
    ServiceModelSectionGroup serviceSection = ServiceModelSectionGroup.
                                                  GetSectionGroup(configFile);
    ClientSection clientSection = serviceSection.Client;
    System.ServiceModel.Channels.Binding bind = new BasicHttpBinding(clientSection .Endpoints[0].BindingConfiguration);
    EndpointAddress newEndpoint = new EndpointAddress(clientSection .Endpoints[0].Address);
    my_service = new TCCSServiceClient(bind, newEndpoint);