|
Подскажите правильный путь.
|
|||
---|---|---|---|
#18+
Дайте пожалуйста совет. Сразу отмечу я не сильно профи в WCF ПОКА. Но все впереди, тема мне интересна. Прочитал книгу по WCF пару лет назад, а сейчас на меня свалился проект, в который пришлось резко нырнуть и "сразу сделать всем хорошо". Проект пока сырой. Грубо говоря я подхватил упавший флаг и понес его дальше. И мне это нравится ! Итак. Есть клиентская часть. Клиент Он должен ОООЧЕНЬ не регулярно отправлять запросы серверу. Клиент отключен. Сервер тоже сидит ждет. Могут так часами молча сидеть. Есть некое время "час пик". В течении которого идет очень тоненький ручеек запросов. Могут раз в 5 минут заявки идти, в это время, а могут и раз в 20 минут. При этом в одной такой "сессии-заявке" клиент отправляет серверу штук 5 запросов, с периодом секунд 20-100 между каждым запросом (пока там пользователь введет данные не спеша). После выполнения "сессии", скорее всего следующая будет не скоро (ну минут через 10 минимум, а то и больше). Таким образом получается такая картина: тишина... длинная тишина... часов 5. Потом вялый обмен запросов к серверу, скорость отклика не сильно критична, ну пару секунд подождать можно. После обработки 3-5 запросов, снова может быть Тишина, а может быть еще один вялый поток через 5-20 минут. сейчас имеются такие настройки <bindings> <basicHttpBinding> closeTimeout="00:00:15" openTimeout="00:00:15" receiveTimeout="00:00:45" sendTimeout="00:00:45" Связь через интернет. Ничего особого я еще пока не прикручивал. Теперь вопросы 1. Подскажите как организовать принцип работы в таких условиях (при таком потоке запросов)? Отмечу, что проект будет работать в таком режиме ОЧЕНЬ долго. Т.е. нет смысла оптимизировать на скорость. От клиента все время будут вялые запросы. Количество клиентов тоже вряд ли будет огромным. Я вижу сейчас такой режим работы. Все изначально отключены. Когда с клиентом начинают работать (как я говорил это около 5 запросов с промежутками от 5 до 100 секунд), то в каждом вызываемом методе я делаю так: - Создаю ФабрикуКанала - Создаю Канал - Делаю запрос ОДНОГО метода - получаю данные и закрываю канал - закрываю Фабрику (close) - обрабатываю данные - выход из метода. Канал и фабрика диспозятся неявно (фиг его знает, когда до них сборщик доберется). Этот момент я вообще пока не оптимизировал ( посоветуйте правильный путь пожалуйста ) это повторяет раз 5 (вызов разных методов, которых заново создаются Фабрика и канал). Правильно ли я поступил ? Насколько я знаю, после того как клиентский канал закрыт, соединение еще держится некоторое время. 2 Правильно ли я понимаю, что фреймворк .NET поддерживает соединение между клиентом и сервером какое-то время, даже если я задиспозил фабрику и канал ? Т.е. делает это невидимо для меня (ну как пул соединений для БД). Таким образом, если у меня будут вызываться 5 функций с созданием фабрики-канала, то они будут использовать ОДНО соединение ? Или каждый раз будет идти новое соединение ? 3. Если я не прав, и после диспоза фабрики все разрывается и потом идет по новой. Насколько длительны задержки при вызове метода - с созданием фабрики по новой, созданием канала и вызовом метода канала ? Насколько все медленней, в сравнении, чем если бы связь держалась всегда (ну по крайней мере между вызовами методов канала) 4. Или все же нужно создавать фабрику один раз, в начале потока запросов. И диспозить ее только через определенный таймаут "неиспользования". Кажется в WCF это есть. Достаточно какие то настройки в конфиг биндинга прописать. Вопрос в том - в чем будет выгода в таком случае ? (это отсылка к моему предыдущему вопросу, в общем то). Прошу прощения за тупые вопросы. Нужно перечитать книгу заново. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2013, 22:28 |
|
Подскажите правильный путь.
|
|||
---|---|---|---|
#18+
LINQStudent, я бы создавал фабрику 1 раз на все время жизни приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2013, 16:51 |
|
Подскажите правильный путь.
|
|||
---|---|---|---|
#18+
автор2 Правильно ли я понимаю, что фреймворк .NET поддерживает соединение между клиентом и сервером какое-то время, даже если я задиспозил фабрику и канал ? Т.е. делает это невидимо для меня (ну как пул соединений для БД). По-моему это происходит на уровне фабрики http://stackoverflow.com/questions/3509487/wcf-client-connection-caching-pooling ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2013, 16:55 |
|
|
start [/forum/topic.php?fid=19&msg=38341291&tid=1397062]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 236ms |
total: | 356ms |
0 / 0 |