所以我决定在我的WCF应用程序中提高性能,并尝试缓存通道和ChannelFactory。在开始之前,有两个问题需要澄清。
1)ChannelFactory应该实现为单例吗?
2)我对如何缓存/重用单个通道有些不确定。你有可以分享的示例吗?
重要的是要注意,我的WCF服务正在部署为独立应用程序,只有一个端点。
编辑:
谢谢回复。我还有几个问题...
1)我想知道缓存应该发生在哪里。我向我们公司的另一个部门提供使用此代码的客户端API。这个缓存发生在客户端上吗?
2)客户端API将作为Silverlight应用程序的一部分使用,这是否会改变任何内容?特别是,在这种情况下可用的缓存机制是什么?
3)我仍然不清楚GetChannelFactory方法的设计。如果我只有一个服务,那么是否应该创建并缓存一个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();
}
}
}