WCF: Сравнение между отсутствием закрытия ChannelFactory и постоянным воссозданием ChannelFactory и его закрытием - PullRequest
3 голосов
/ 17 июня 2010

У меня есть сервис WCF, который я использую в своем коде и сгенерировал как класс ChannelFactory. Я знаю, что правильный способ использования WCF - создать ChannelFactory (давайте назовем это AwesomeClient), выполнить работу, а затем вызвать Close () для него. Вот мой фрагмент:

    public static void DoSomething()
    {
        var client = new AwesomeClient();
        client.DoSomethingAwesome();
        client.Close();
    }

Однако я ожидаю, что DoSomething будет вызываться довольно часто (скажем, 10 раз в минуту?), Поэтому я получил совет создать экземпляр ChannelFactory как статический экземпляр и всегда повторно использовать один и тот же экземпляр, и никогда Закрыть его (потому что это «дешевле», чем всегда заново создавать ChannelFactory и затем закрывать его).

Я здесь для второго мнения, может кто-нибудь сказать мне, почему бы не вызвать Close и повторно использовать статический экземпляр, это хорошая идея? Или я должен просто продолжать воссоздавать ChannelFactory и Close () - для каждого вызова?

1 Ответ

3 голосов
/ 18 июня 2010

10 раз в минуту не так часто. 10 раз в секунду я бы определенно подумал о повторном использовании канала.

В вашем деле много неизвестных, чтобы принять правильное решение. Сколько клиентов будет подключаться к услуге? Что это за соединение (есть ли вероятность, что оно разорвется на доли секунды), есть ли балансировщик нагрузки? Proxy?

и, кстати, если вы решите открывать и закрывать канал каждый раз, нет необходимости заново создавать ChannelFactory. Держите это статичным, просто открывайте и закрывайте новый канал каждый раз. В большинстве случаев создание фабрики требует больше ресурсов.

...