Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы и WCF
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 04.10.2014
Сообщений: 39
1

Быстро растет размер wcf сервиса

20.11.2015, 09:32. Показов 899. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Я занимаюсь изучением ASP.NET и WCF. Передо мной стоит задача - создать службу, которая будет в таймере опрашивать сеть контроллеров. Далее через приложения Windows и веб сайты считывать список показаний.
Для службы принял решение создать wcf сервис (Опыта работы с ним не было).
Столкнулся с проблемой, которую вот уже 3 день не могу решить. В таймере на asp.net каждый цикл, как я понял, приложение загружается заново. В Page_Load есть метод var client = new ServiceReference1.ScadaClient(); (Инициализирует класс службы) который каждый раз инициализируется заново. И каждый раз срабатывает конструктор класса на wcf службе. И в связи с этим очень быстро растет размер памяти службы.
Я делаю что-то не так, но не знаю куда копать. Как мне предотвратить постоянную инициализацию, а просто по таймеру веб приложения обращаться к методу класса службы для считывания таблицы показателей?

После окончания жизненного цикла веб приложения освобождать класс ScadaClient не вариант, т.к. там свои таймеры, и задачи.

Надеюсь понятно изложил суть проблемы
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2015, 09:32
Ответы с готовыми решениями:

Вызов WCF сервиса
Добрый день. Скажу сражу что сервисы я начал изучать недавно Передо мной такая задача. в...

Пример WCF сервиса
Всем привет! Гуглил но не нашел скажем так "нормального примера" WCF сервиса. Все примеры простые...

Запуск WCF сервиса
Добрый день. Помогите, если не сложно. 4 день бьюсь уже, не понимаю, в чём проблема. Пытаюсь...

Хостинг WCF сервиса
Был WCF-сервис, который хостился на консольном приложении, у этого консольного приложения были свои...

11
Эксперт .NET
5545 / 4308 / 1218
Регистрация: 12.10.2013
Сообщений: 12,356
Записей в блоге: 2
20.11.2015, 09:48 2
Цитата Сообщение от terranova Посмотреть сообщение
Надеюсь понятно изложил суть проблемы
Не совсем, но первый вопрос: вы клиента закрываете? Оберните его создание в конструкцию using(...), каждый клиент реализует IDisposable, по выходу из конструкции объект будет уничтожен.
0
0 / 0 / 0
Регистрация: 04.10.2014
Сообщений: 39
20.11.2015, 09:57  [ТС] 3
Цитата Сообщение от insite2012 Посмотреть сообщение
вы клиента закрываете? Оберните его создание в конструкцию using(...), каждый клиент реализует IDisposable, по выходу из конструкции объект будет уничтожен.
Это то понятно. Ничего не помогает. Пробовал.
И почему то клиент не реализует явно Dispose(), Это нормально ? Но в using ошибку не выдает
0
Эксперт .NET
5545 / 4308 / 1218
Регистрация: 12.10.2013
Сообщений: 12,356
Записей в блоге: 2
20.11.2015, 10:02 4
Цитата Сообщение от terranova Посмотреть сообщение
почему то клиент не реализует явно Dispose()
Сам по себе сгенерированный Студией клиент - нет. Но он наследник от ClientBase<T>, который и реализует IDisposable.
Какой режим управления экземплярами используете? Если память растет, значит ее кто-то потребляет. Может, сделать одного клиента, как синглетную службу?
0
0 / 0 / 0
Регистрация: 04.10.2014
Сообщений: 39
20.11.2015, 10:09  [ТС] 5
Цитата Сообщение от insite2012 Посмотреть сообщение
Какой режим управления экземплярами используете? Если память растет, значит ее кто-то потребляет. Может, сделать одного клиента, как синглетную службу?
Память растет при повторной инициализации экземпляра. Про синглетную службу я ничего не понял. И что значит режим управления экземплярами? Я еще не ас в этом деле)
0
Эксперт .NET
5545 / 4308 / 1218
Регистрация: 12.10.2013
Сообщений: 12,356
Записей в блоге: 2
20.11.2015, 10:16 6
Цитата Сообщение от terranova Посмотреть сообщение
Про синглетную службу я ничего не понял. И что значит режим управления экземплярами?
Служба может работать в одном из трех режимов:
1. Служба уровня вызова (при каждом вызове метода любым из клиентов создается новый экземпляр службы, после завершения метода этот экземпляр уничтожается).
2. Режим сессии (экземпляр службы создается при первом вызове любого из методов клиентом, уничтожается после явного ее закрытия или по таймауту).
3. Синглетная служба - экземпляр службы всегда один, и все клиенты просто к нему подключаются.
0
0 / 0 / 0
Регистрация: 04.10.2014
Сообщений: 39
20.11.2015, 10:41  [ТС] 7
Цитата Сообщение от insite2012 Посмотреть сообщение
Служба может работать в одном из трех режимов:
1. Служба уровня вызова (при каждом вызове метода любым из клиентов создается новый экземпляр службы, после завершения метода этот экземпляр уничтожается).
2. Режим сессии (экземпляр службы создается при первом вызове любого из методов клиентом, уничтожается после явного ее закрытия или по таймауту).
3. Синглетная служба - экземпляр службы всегда один, и все клиенты просто к нему подключаются.
У меня сейчас служба уровня вызова. Только экземпляр, видимо, не уничтожается. А нужна синглетная.
Т.к. на ней крутятся таймеры, которые выполняют автономно определенные методы
0
Эксперт .NET
5545 / 4308 / 1218
Регистрация: 12.10.2013
Сообщений: 12,356
Записей в блоге: 2
20.11.2015, 11:17 8
Цитата Сообщение от terranova Посмотреть сообщение
Только экземпляр, видимо, не уничтожается.
Возможно, что-то мешает? Может, какие-то незакрытые ресурсы? Реализуйте в службе IDisposable и закройте их.
Цитата Сообщение от terranova Посмотреть сообщение
нужна синглетная.
Либо сконфигурируйте службу так. Но масштабируемость падает.
0
0 / 0 / 0
Регистрация: 04.10.2014
Сообщений: 39
20.11.2015, 12:51  [ТС] 9
Цитата Сообщение от insite2012 Посмотреть сообщение
Либо сконфигурируйте службу так. Но масштабируемость падает.
А как сконфигурировать службу, что бы не инициализировать ее каждый раз, а просто подключиться? Я просто в wcf еще ничего не знаю, хотя бы литературу дайте по теме.
0
Эксперт .NET
5545 / 4308 / 1218
Регистрация: 12.10.2013
Сообщений: 12,356
Записей в блоге: 2
20.11.2015, 12:57 10
Цитата Сообщение от terranova Посмотреть сообщение
как сконфигурировать службу
К классу, реализующему контракт службы примените атрибут
C#
1
[ServiceBehavior(InstanceContextMode=InstantContecxtMode.Single)]
https://msdn.microsoft.com/ru-... .110).aspx
Из книг могу посоветовать Джувел Леве, Создание служб WCF.
0
0 / 0 / 0
Регистрация: 04.10.2014
Сообщений: 39
20.11.2015, 14:10  [ТС] 11
Цитата Сообщение от insite2012 Посмотреть сообщение
C#Выделить код
1
[ServiceBehavior(InstanceContextMode=InstantContecxtMode.Single)]
У меня почему то этот способ не срабатывает( Студия 5 минут пытается обновить ссылку на службу, а потом выдает ошибку: Неверный URI. Для остальных режимов PerCall и PerSession проходится все нормально. В чем может быть проблема ?
0
Эксперт .NET
5545 / 4308 / 1218
Регистрация: 12.10.2013
Сообщений: 12,356
Записей в блоге: 2
20.11.2015, 14:29 12
Цитата Сообщение от terranova Посмотреть сообщение
В чем может быть проблема ?
Скорее всего, служба WCF еще не запущена. Сначала ее надо запустить. Я не знаю что у вас за проект, но к примеру в форме ее можно запустить в конструкторе основной формы. В других типах примерно по аналогии, в момент создания приложения.
0
20.11.2015, 14:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2015, 14:29
Помогаю со студенческими работами здесь

Конфигурация WCF сервиса
Добрый день. Подскажите, пожалуйста, как правильно конфигурировать WCF сервис. У меня было...

Создание многопользовательского WCF-сервиса
Задание предполагает реализацию простого многопользовательского WCF-сервиса с асинхронными...

Создание асинхронного wcf-сервиса
Уважаемые Гуру! Задача такая: 1. На клиенте silverlight приложения должно появляться уведомление...

Размещение WCF сервиса на хостинге
Доброго времени суток. Изучаю WCF. Разработал небольшую службу для обмена сообщения. Сервис...

Доступность метаданных WCF сервиса
Создал проект с двумя севрисами в нем. Создал собственный класс для аутентификации пользователя в...

Как получить ответ от WCF сервиса
Здравствуйте! В первые сталкиваюсь с WCF, и не могу понять как получить ответ от сервиса, и вывести...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru