有很多材料解释了为什么使用svcutil.exe(或“添加服务引用”)很糟糕 - 缺乏可测试性,紧密耦合等。手动为简单服务创建客户端代理很简单,只需手动创建你的界面并创建一个频道:
IMessageServiceAsync service = new ChannelFactory<IMessageServiceAsync>("BasicHttpBinding_IMessageEndpoint").CreateChannel();
我想做类似的事情但是对于Silverlight PollingDuplex客户端。
这看起来更难 - 生成的客户端继承自System.ServiceModel.DuplexClientBase
- 我假设我手动创建的客户端也需要?或者有没有办法连接所有客户端Duplex回调功能而不实现这个基类?
有没有人试过这个?它甚至可能吗?
答案 0 :(得分:2)
有可能 - 您可以使用DuplexChannelFactory<T>
类以与示例中的ChannelFactory<T>
类似的方式创建代理,但是您需要传递一个额外的参数(键入InstanceContext
)将包含用于从服务器接收消息的回调接口的实现。