WCF Channel и ChannelFactory Кэширование
Поэтому я решил немного повысить производительность в своем приложении 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();
}
}
}