Будет ли WCF использовать один и тот же экземпляр ParameterInspector для обработки BeforeCall и AfterCall? - PullRequest
2 голосов
/ 27 марта 2011

Если я создам класс, который реализует IParameterInspector, и вставлю его в трубопровод WCF с помощью пользовательского ServiceBehavior, будет ли использоваться тот же экземпляр класса при вызове BeforeCall и AfterCall?Другими словами, могу ли я установить состояние о текущем вызове во время BeforeCall, к которому я могу получить доступ в AfterCall, и быть уверенным, что ответ придет в тот же экземпляр?

Обратите внимание на _stateValue в приведенном ниже примере кода?Могу ли я зависеть от такого механизма?

class OperationParameterInspector : IParameterInspector
{
    public int _stateValue;

    public object BeforeCall(string operationName, object[] inputs)
    {
        _stateValue = (int) inputs[0];
        return null;
    }

    public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
    {
        int originalInput = _stateValue;
        return;
    }
}

1 Ответ

2 голосов
/ 27 марта 2011

Передача состояния, связанного с конкретным вызовом, является целью возвращаемого значения из BeforeCall и аргумента correlationState AfterCall. Инфраструктура WCF гарантирует, что любой объект, который вы возвращаете из BeforeCall, затем передается в AfterCall через correlationState после завершения операции.

Как следует из вашего последующего комментария, проблема с использованием состояния экземпляра в объекте инспектора заключается в том, что экземпляры могут совместно использоваться параллельными запросами в некоторых сценариях. Однако я не думаю, что есть какие-либо сценарии, когда один запрос операции будет обслуживаться различными объектами инспектора параметров в BeforeCall и AfterCall.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...