我正在创建一些身份验证表单,用户必须在其中定义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客户端分配新端点?
答案 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);