получить доступ к контекстной информации из IParameterInspector (WCF) - PullRequest
0 голосов
/ 11 января 2011

Я пытаюсь записать все параметры для всех запросов WCF-сервиса. Для этого я использую «IParameterInspector», который реализован и работает до сих пор.

public class ParameterInspector_for_RequestLogging : IParameterInspector
{
    #region IParameterInspector Members

    public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState) {
            //Note: correlationState contains an object with contains the inputValues
            //...
            log.WriteEntry(
                new LogData(
                    String.Format("          Req={0}, Time: {1}ms, Input-Parameter: '{2}', Output-Parameter: '{3}', ReturnValue: '{4}'"
                        , operationName
                        , Environment.TickCount - correlationStateData.RequestStartAt
                        , String.Join("','", inputParameter.ToArray())
                        , String.Join("','", outputParameter.ToArray())
                        , returnValue.ToString()
                        )
                    )
                );

    }
}

с выводом:

Req=ABC, Time: 500ms, Input-Parameter: '123,ABC,zzz,55', Output-Parameter: '0', ReturnValue: '0'"

Итак, у меня 2 проблемы. 1. Как я могу найти правильные имена входных и выходных параметров. 2. Как я могу вставить контекстную информацию? Как получить доступ к контекстной информации. (Как имя пользователя)

я пытаюсь создать следующий вывод:

User: CurrentUser (UserNumber) - Req=ABC, Time: 500ms
  , Input-Parameter: '<int32>para1: 123, <string>Para2: ABC
    ,<string>Para3: zzz, <ref byte>Para4: 55'
  , Output-Parameter: '<byte> 0', ReturnValue: '<Int64> 0'"

1 Ответ

0 голосов
/ 29 июня 2011

Попробуйте поискать System.ServiceModel.OperationContext

Мне удалось получить текущего пользователя в течение IParameterInspector, используя System.ServiceModel.OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.

...