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;