以编程方式更改WCF代理类的默认集合

本文关键字:默认 集合 代理 WCF 编程 方式更 | 更新日期: 2023-09-27 18:13:23

我有一个应用程序,用户将连接到一个或多个运行在其网络中的机器上的WCF服务。因为在安装时不知道这些连接的地址,所以应用程序必须以编程方式连接到这些服务(即,我不能使用Add Service Reference)。我使用以下代码连接工作:

string url = "...the url...";
BasicHttpBinding binding = new BasicHttpBinding();            
EndpointAddress address = new EndpointAddress(url);
ILicenseService service = ChannelFactory<ILicenseService>.CreateChannel(binding, address);

然而,我的服务类的一些成员返回一个包含元素的ObservableCollection。我知道如何在"服务引用"对话框中使用"高级设置"更改集合类型。然而,我无法找出一种方法来编程地设置这个值,以便我的客户端知道将返回类型读取为ObservableCollection而不是List。有线索吗?

以编程方式更改WCF代理类的默认集合

它应该反序列化为服务类的接口定义的类型,或者序列化对象的属性类型。尝试更改接口/类上的集合类型。

顺便说一下,您说您不能使用Add service reference,因为在编译时不知道服务端点地址,但这不应该阻止您使用它。获取WSDL的副本并将其从本地WSDL文件导入Add service reference,然后在创建服务代理时指定实际的端点地址,如下所示。