我对WCF比较新。一开始,我创建了一个WCF服务,并使用生成的客户端代理从客户端消费该服务。因此,每当我在服务上执行某些操作时,所有操作都会按顺序执行,因为我是同步调用操作。我将并发模式更改为多个,但仍然同步发生操作。然后,我为我的操作生成了异步方法,并使用了开始/结束模式,这样我猜可以“释放”通道并使操作以并行/异步方式发生,从而增加应用程序的吞吐量。
然后我使用了ChannelFactory
来创建通道,并作为客户端执行了操作,因为客户端和服务器可以共享契约(同一项目)。但是IClientChannel
只提供BeginOpen / EndOpen / BeignClose / EndClose
。它没有ClientBase
的BeginOperation / EndOperation
方法。因此,基本上我无法在通道上异步执行操作,以便释放通道,以便我可以使用通道执行其他操作。
于是我为每个操作创建了通道,问题得到解决。
所以我的问题是:
在我的情况下(
ClientBase vs. ChannelFactory
),哪个更好,尤其是我想同时使用多个线程在服务对象上执行多个操作为每个操作创建通道是否明智?
事实上,我认为我们只能在两个端点(客户端/服务)之间拥有一个通道。但是我可以创建任意多个通道。例如:我能够创建Int16.MaxValue个通道。因此不确定这方面的限制和建议。
Service[] channels = new IService[Int16.MaxValue];
for(int i = 0; i<Int16.MaxValue; i++)
{
channels[i] = factory.CreateChannel();
}
所以基本上,您能否请告诉我有关频道、建议和技巧等基础知识等等? :)