Не выбрасываете прокси WCF? - PullRequest
1 голос
/ 06 апреля 2010

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

1 Ответ

0 голосов
/ 31 марта 2011

Удаление службы WCF - это не то же самое, что удаление любого другого объекта, который реализует IDisposable. Можно утилизировать сервис, когда он находится в хорошем состоянии, но при возникновении сбоя метод dispose выдаст еще одно исключение. Некоторое понимание здесь и, возможно, используйте WCFProxyGenerator , но я не пробовал

Не совсем точно проблема со службой на основе сеанса и отличается ли она от службы WCF.

Моя рекомендация - не использовать одиночный, а использовать Dependency Injection, чтобы дать классу, использующему сервис WCF, фабрику, поэтому, когда ему нужен сервис, он может его создать. И когда происходит сбой, он может выбросить старое и создать новый. Не видя некоторого кода, трудно понять, возможно ли это.

...