Сгенерированный клиент службы WCF в Silverlight повторно использует ChannelFactory? - PullRequest
0 голосов
/ 18 февраля 2011

Следует ли использовать созданный клиент службы WCF (например, MyServiceClient) при вызове службы WCF из silverlight, или вместо этого использовать ChannelFactory (например, ChannelFactory.Create ())?

Другие вопросы задавали этот вопрос: WCF / Silverlight: зачем использовать ChannelFactory вместо клиента?

Однако в ответах просто говорится, что лучше всего повторно использовать ChannelFactory. Но если это будет сделано напрямую, вы потеряете все остальные функции сгенерированного клиента службы WCF (асинхронные события и т. Д.)

Нет ли способа заставить сгенерированный клиент службы WCF повторно использовать сам ChannelFactory?

1 Ответ

0 голосов
/ 18 февраля 2011

WCF Fiasco

START_RANT

Даже команда Microsoft и WCF знает, что способ ChannelFactory, Channel и ClientBase был спроектирован, и способ его изменения из-за различных проблем с производительностью был настоящим фиаско. Достаточно того факта, что использование прокси является настоящим беспорядком, достаточно знать под расширяемостью WCF, мы имеем дело с неэффективным, раздутым и запутанным дизайном. Просто плохо, плохо, плохо.

END_RANT

Хорошо, вы, вероятно, просматривали документацию, но я предполагаю, что вы не смогли найти свои ответы - как я не смог - так как нет простого ответа. Но вот мои выводы, которые, мы надеемся, суммируют эти моменты (вы не найдете ниже ни в одной документации MS):

1) У нас есть ChannelFactory и IChannel. ChannelFactory знает, как связаться с транспортом, а канал знает, как интерпретировать параметры для вызовов методов WCF и наоборот. IChannel - это тот, который "реализует" (или выглядит как реализующий) интерфейс службы, в то время как ChannelFactory имеет все необходимые абстракции для связи (включая конечную точку, безопасность, ...).

2) ClientBase - это не что иное, как ChannelFactory и IChannel, слитые вместе. Таким образом, очевидно, что создание ChannelFactory один раз, а затем создание каналов снова и снова означает, что он более эффективен, однако, как вы уже догадались, это не так просто, потому что ...

3) ChannelFactory после открытия не может быть изменено. Это означает, что если вы используете пароль для имени пользователя для подключения к службе WCF и пароль пользователя меняется, то вам нужен новый. Это может показаться не большой проблемой, но становится большой проблемой в сценарии ASP NET.

4) ChannelFactory и IChannel фактически используют одни и те же базовые каналы связи, поэтому закрытие ChannelFactory сделает IChannel недействительным. Это приводит к путанице в коде очистки и принятии решения, чья ответственность заключается в том, чтобы закрыть соединение.

5) Как видите, нет простого ответа. Если вам не нужно использовать имя пользователя / пароль или изменять конфигурацию во время выполнения, создайте и кэшируйте ChannelFactory, а затем просто создайте каналы. В любом случае ChannelFactory и IChannel более эффективны, чем ClientBase.

...