C #, WCF, когда повторно использовать прокси на стороне клиента - PullRequest
4 голосов
/ 17 декабря 2009

Я пишу приложение, которое передает файлы с использованием WCF. Передачи выполняются по сегментам, чтобы их можно было возобновить после любого непредвиденного прерывания.

Мой вопрос касается использования клиентского прокси, лучше ли держать его открытым и повторно использовать для передачи каждого сегмента файла, или я должен открывать его каждый раз, когда хочу что-то отправить?

Ответы [ 3 ]

11 голосов
/ 17 декабря 2009

Причиной закрытия прокси-сервера как можно быстрее является тот факт, что у вас может быть сеанс, который связывает системные ресурсы (netTcpBinding использует сеанс транспортного уровня, wsHttpBinding может использовать сеансы безопасности или сеансы на основе надежности).

Но вы правы - пока клиентский прокси не находится в неисправном состоянии, вы можете полностью использовать его.

Если вы хотите пойти еще дальше и поделиться общей сборкой с контрактами на обслуживание и данные между сервером и клиентом, вы можете разделить создание клиентского прокси на два этапа:

  • создайте ChannelFactory<IYourServiceContract> один раз и кешируйте это - это очень дорогая и ресурсоемкая операция; поскольку вам нужно сделать это универсальным, используя ваш контракт на обслуживание (интерфейс), вы должны иметь возможность делиться контрактами между сервером и клиентом

  • с учетом этой фабрики вы можете создавать свои каналы, используя factory.CreateChannel() по мере необходимости - эта операция гораздо менее «тяжелая» и может выполняться быстро, многократно

Это одна из возможных оптимизаций, которую вы могли бы рассмотреть - учитывая сценарий, которым вы управляете обоими сторонами коммуникации, и вы можете разделить сборку контракта между сервером и клиентом.

3 голосов
/ 17 декабря 2009

Вы можете повторно использовать свой прокси-клиент WCF, и это ускорит работу вашего клиентского приложения, поскольку прокси-сервер будет только один раз инициализирован.

1 голос
/ 04 апреля 2013

Создание нового прокси занимает около 50-100 мс времени, если вашей системе требуется хорошее масштабирование, это довольно значительное время.

При повторном использовании прокси вы должны быть осторожны с состоянием потоков и . Не пытайтесь отправлять данные через прокси, который уже занят отправкой данных. (или получая) У тебя будут ужасные бессонные ночи.

Одним из способов повторного использования является наличие личного поля [ThreadStatic] для прокси-сервера и проверка его состояния и наличия каждый раз, когда вам нужно отправить данные. Если был создан новый поток, статическое поле потока будет нулевым, и вам нужно будет создать прокси. Предполагая, что у вас есть простая модель потоков, это не позволит различным потокам наступать друг другу на ноги, и вам придется беспокоиться только о неисправном состоянии прокси.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...