【问题标题】:Programmatically Changing the Default Collection for WCF Proxy Class以编程方式更改 WCF 代理类的默认集合
【发布时间】:2025-12-10 07:50:01
【问题描述】:

我有一个应用程序,用户将连接到在其网络中的计算机上运行的一个或多个 WCF 服务。因为在安装时这些连接的地址是未知的,所以应用程序必须以编程方式连接到这些服务(即我不能使用添加服务引用)。我使用以下代码进行连接:

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

但是,我的服务类的一些成员返回 ObservableCollection 的元素。我知道如何使用高级设置在“服务参考”对话框中更改集合类型。但是,我无法找到以编程方式设置此值的方法,以便我的客户知道将返回类型读取为ObservableCollection 而不是列表。有什么线索吗?

【问题讨论】:

  • 那么,您在 ILicenseService 上的方法中返回什么类型?

标签: c# wcf collections


【解决方案1】:

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

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

【讨论】: