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

时间:2014-08-21 23:08:02

标签: c# web-services wcf wcf-endpoint

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

在创建服务连接之前,用户输入的端点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客户端分配新端点?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

为了能够连接到服务,客户端需要三条信息 - 地址,绑定和合同。您可以尝试通过代码设置它们并检查是否使用了新的IP地址。查看此解决方案:Dynamically set endpoint address in wcf client (with net tcp binding)

答案 2 :(得分:0)

再次感谢您的回答。我通过定义绑定和端点重新创建了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);