C# 如何手动创建Silverlight PollingDuplex客户端/代理?

C# 如何手动创建Silverlight PollingDuplex客户端/代理?,c#,.net,silverlight,wcf,pollingduplexhttpbinding,C#,.net,Silverlight,Wcf,Pollingduplexhttpbinding,有很多资料解释了为什么使用svcutil.exe(或“添加服务引用”)不好-缺乏可测试性、紧密耦合等。手动为简单服务创建客户端代理非常简单,您只需手动创建接口并创建通道: IMessageServiceAsync service = new ChannelFactory<IMessageServiceAsync>("BasicHttpBinding_IMessageEndpoint").CreateChannel(); IMessageServiceAsync服务=新的Chann

有很多资料解释了为什么使用svcutil.exe(或“添加服务引用”)不好-缺乏可测试性、紧密耦合等。手动为简单服务创建客户端代理非常简单,您只需手动创建接口并创建通道:

IMessageServiceAsync service = new ChannelFactory<IMessageServiceAsync>("BasicHttpBinding_IMessageEndpoint").CreateChannel(); 
IMessageServiceAsync服务=新的ChannelFactory(“BasicHttpBinding_IMessageEndpoint”).CreateChannel();
除了Silverlight PollingDuplex客户端之外,我还想做一些类似的事情

这似乎更困难-生成的客户端继承自
System.ServiceModel.DuplexClientBase
-我想我手动创建的客户端也需要?或者有没有一种方法可以在不实现这个基类的情况下连接所有客户端双工回调功能


有人试过这个吗?有可能吗

这是可能的-您可以使用
DuplexChannelFactory
类以与示例中的
ChannelFactory
类似的方式创建代理,但您需要传递一个额外的参数(键入
InstanceContext
)它将包含用于从服务器接收消息的回调接口的实现。

太棒了,谢谢。只是出于兴趣,是否还有其他我应该注意的潜在陷阱?没有一个特定于
DuplexChannelFactory
本身;添加服务引用(DuplexChannelBase的子类
DuplexChannelBase
)生成的代理与由
DuplexChannelFactory.CreateChannel()创建的代理等效。