Служба WCF не отвечает после перезапуска пула приложений

У меня есть одно приложение, которое постоянно проверяет один ответ службы wcf, и эта служба размещена в IIS.

Когда я запускаю это приложение, а служба уже работает в фоновом режиме, в это время приложение получает ответ от службы в течение n-го числа раз. Но когда я перерабатываю пул приложений, приложение не получает ответа от службы. В этот момент мне нужно перезапустить приложение, и оно работает.

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


person Ankit Saini    schedule 28.08.2018    source источник
comment
Возможно, вы можете воссоздать прокси-сервер при каждом вызове в своем веб-приложении, это может сделать его немного медленным, но он гарантированно всегда будет получать ответ на службы приложения wcf, если вы не вносите каких-либо серьезных изменений в свою службу wcf.   -  person mahlatse    schedule 29.08.2018


Ответы (1)


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

person MickyD    schedule 28.08.2018
comment
Да, вы правы, моя служба WCF основана на сеансах и создается повторно при перезапуске пула приложений. Но я не хочу менять эти настройки. Есть ли способ уведомить пользовательские приложения этой службы о том, что AppPool переработан? - person Ankit Saini; 29.08.2018
comment
@AnkitSaini Если вы не используете двустороннюю связь со службой, вызывающей клиента, то, вероятно, нет. Если сервер AppPool перезапускается или перезапускается, он аннулирует все клиентские прокси. Похоже, вы проводите опрос. Хотя это не так уж и плохо, почему бы не опрашивать сервер каждые 15 секунд или минуту (в зависимости от требований), чтобы получить сердцебиение? Если он выходит из строя, вы знаете, что сервер переработан, и в этот момент вы повторно создаете свой клиентский прокси и снова пингуете его. - person MickyD; 29.08.2018
comment
@AnkitSaini Вы можете открыть службу WCF на клиенте, которую сервер может вызвать (обратный вызов), чтобы сказать привет! Я снова бегу. Это могло бы сработать лучше - person MickyD; 29.08.2018