WCF OperationContext IncomingMessageHeader не получен

Я использую WebAPI вместе со службами WCF. Вызовы API проходят проверку подлинности через Identity Server, а затем вызывают клиент wcf, где я беру электронную почту пользователя (из утверждений) и вставляю ее в OutgoingMessageHeaders и передаю ее на сторону сервера. Все отлично работает при вызове одного сервиса за раз (да, с внедрением зависимости). Когда я помещаю еще один доступный сервис в конструктор API, сообщение, вставленное в OutgoingMessageHeaders, не передается IncomingMassageHeaders. Кто-нибудь может мне помочь с этим?

- WEB Api - если ICustomerService удален (или наоборот), все работает хорошо

[ImportingConstructor]
    public JobController(IJobService jobService, ICustomerService customerService)
    {
        _jobService = jobService;
        _customerService = customerService;
    }

    IJobService _jobService;
    ICustomerService _customerService;

    protected override void RegisterServices(List<IServiceContract> disposableServices)
    {
        disposableServices.Add(_jobService);
        disposableServices.Add(_customerService);
    }

- WCF ClientBase класс -

        public UserClientBase()
    {
        string userName = Thread.CurrentPrincipal.Identity.Name;

        if (string.IsNullOrEmpty(userName))
        {
            var principal = Thread.CurrentPrincipal as ClaimsPrincipal;

            if (principal == null)
                throw new SecurityException("ClaimPrincipal is null");

            var email = principal?.FindFirst(ClaimProperty.Email)?.Value;
            userName = string.IsNullOrEmpty(email) ? string.Empty : email;
        }

        if (!string.IsNullOrEmpty(userName))
        {
            MessageHeader<string> header = new MessageHeader<string>(userName);

            OperationContextScope contextScope = new OperationContextScope(InnerChannel);

            OperationContext.Current.OutgoingMessageHeaders.Add(header.GetUntypedHeader("String", "System"));
        }
    }  

- WCF ManagerBase класс -

public ManagerBase()
    {
        OperationContext context = OperationContext.Current;
        var principal = ClaimsPrincipal.Current;
        if (context != null)
        {
            try
            {
                _LoginName = OperationContext.Current.IncomingMessageHeaders.GetHeader<string>("String", "System");
                if (_LoginName.IndexOf(@"\") > -1) _LoginName = string.Empty;
            }
            catch
            {
                _LoginName = string.Empty;
            }
        }

        if (ObjectBase.Container != null)
            ObjectBase.Container.SatisfyImportsOnce(this);

        if (!string.IsNullOrWhiteSpace(_LoginName))
        {
            _AuthorizationAccount = LoadAuthorizationValidationAccount(_LoginName);
        }
    }

    protected virtual Account LoadAuthorizationValidationAccount(string loginName)
    {
        return null;
    }

    public Account _AuthorizationAccount = null;
    string _LoginName = string.Empty;

0 ответов

Другие вопросы по тегам