【发布时间】:2011-12-12 02:35:23
【问题描述】:
所以我决定在我的 WCF 应用程序中提高一点性能,并尝试缓存 Channels 和 ChannelFactory。在开始之前,我有两个关于这一切的问题需要弄清楚。
1) ChannelFactory 是否应该实现为单例?
2) 我有点不确定如何缓存/重用各个频道。你有什么例子可以分享吗?
请务必注意,我的 WCF 服务正在部署为一个独立的应用程序,只有一个端点。
编辑:
感谢您的回复。不过我还有几个问题...
1) 我想我对应该在哪里进行缓存感到困惑。我正在向我们公司的另一个部门提供使用此代码的客户端 API。这种缓存是否发生在客户端上?
2) 客户端 API 将用作 Silverlight 应用程序的一部分,这会改变什么吗?具体来说,在这种情况下有哪些缓存机制可用?
3)我还不清楚GetChannelFactory方法的设计。如果我只有一项服务,是否应该只创建和缓存一个 ChannelFactory?
我还没有实现任何缓存功能(因为我完全不知道应该如何完成它!),但到目前为止,我为客户端代理提供了以下功能:
namespace MyCompany.MyProject.Proxies
{
static readonly ChannelFactory<IMyService> channelFactory =
new ChannelFactory<IMyService>("IMyService");
public Response DoSomething(Request request)
{
var channel = channelFactory.CreateChannel();
try
{
Response response = channel.DoSomethingWithService(request);
((ICommunicationObject)channel).Close();
return response;
}
catch(Exception exception)
{
((ICommenicationObject)channel).Abort();
}
}
}
【问题讨论】:
-
对于#3,是的,应该只创建一个通道工厂。基本上,您拥有的每个服务终端都将拥有一个通道工厂。就我而言,到目前为止,我们大约有 6 个,主要分布在 2 个层级。在您的情况下,如果您只拥有一项服务,由一个应用程序使用,您可以简单地执行您在上面所做的事情。你上面的代码是在正确的轨道上。缓存将基于应用的需求。
-
@Tim - 感谢您的所有帮助。我真的很感激!我认为在我的情况下,我的服务如此“简单”的事实让我在查看这些其他有多个端点的示例时感到困惑。我=现在不那么困惑了=蒂姆解释得很好!谢谢老兄!
-
不客气。很高兴能帮上忙 - 编码愉快!
标签: c# .net wcf channel channelfactory