2009-02-19 9 views
3

Я рассматриваю использование общего (прочитанного статического) клиента прокси-сервера WCF для приложения с высокой пропускной способностью. Я считаю, что в этом есть выигрыш в производительности, но пока я не оценил это.Каковы ловушки использования общего статического клиента прокси-сервера WCF?

Есть ли серьезные подводные камни этой идеи?

Из моего исследования я вижу, что существует проблема обработки состояния сбоя, неясно, какой поток влияет на состояние этого состояния на другие ожидающие запросы.

Есть ли у кого-нибудь опыт восстановления прокси-сервера WCF из его состояния с ошибкой?

благодарит заранее!

+0

вот связанная статья http://jeffbarnes.net/portal/blogs/jeff_barnes/archive/2007/04/24/wcf-your-proxy-can-only-fault-once.aspx –

+0

Это хорошо но он не объясняет, что происходит с другими ожидающими запросами. –

ответ

4

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

Для справки Я делаю около 30-60 запросов около 5K-30K на запрос в секунду на четырехъядерном процессоре с другого четырехъядерного процессора. До сих пор WCF до сих пор держится неплохо.

+0

Пробовал ли вы использовать «client.InnerChannel.AllowOutputBatching = true;» ? Я думал, что это может быть там, где может появиться увеличение производительности. –

+0

Нет, мой вариант довольно «из коробки». Единственное, что я изменил, это увеличить MaxItemsInObjectGraph и MaxRecievedMessageSize. Не пробовали AllowOutputBatching. Было бы интересно посмотреть, как хорошо это работает. – Fung

2

Я только что обнаружил, что вызов Close() на прокси-сервере будет блокироваться при вызове, выполняющем операции One Way, [OperationContract (IsOneWay = true)]. Это также изменило бы поток.