Итак, я решил немного повысить производительность моего приложения WCF и попытаться кэшировать каналы и ChannelFactory. Есть два вопроса, которые у меня есть обо всем этом, что мне нужно прояснить, прежде чем я начну.
1) Если ChannelFactory будет реализован как одиночный?
2) Я не уверен, как кэшировать/повторно использовать отдельные каналы. Есть ли у вас примеры того, как это сделать, вы можете поделиться?
Вероятно, важно отметить, что моя служба WCF развертывается как автономное приложение с одной конечной точкой.
EDIT:
Спасибо за ответы. У меня все еще есть несколько вопросов, хотя...
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();
}
}
}