public async Task <LogonResponse> Logon(LogonRequestData logonRequestData) { if (!string.IsNullOrEmpty(await _sessionBag.AgentName())) { throw new ResponseErrorException(ResponseErrorCode.AlreadyLoggedIn, string.Format("Already logged in as {0}", await _sessionBag.AgentName())); } nsk.LogonResponse logonResponse; var previousSignature = await _sessionBag.Signature(); try { logonResponse = await _client.LogonAsync(new nsk.LogonRequest { logonRequestData = _mapper.Map <nsk.LogonRequestData>(logonRequestData) }); } catch (System.ServiceModel.FaultException e) { if (e.Message.Contains("No agent found") || e.Message.Contains("was not authenticated") || e.Message.StartsWith("Unable to find best role for agent")) { throw new ResponseErrorException(ResponseErrorCode.InvalidLogin, "Invalid login details. "); } //Handle scenario: System.ServiceModel.FaultException: 'The agent (WW2/[email protected]) must reset their password.' if (e.Message.Contains("must reset their password")) { return(new LogonResponse { MustChangePassword = true }); } throw e; } var newSignature = logonResponse.Signature; var booking = await _sessionBag.Booking(); if (booking != null && string.IsNullOrEmpty(booking.RecordLocator) && !string.IsNullOrEmpty(previousSignature)) { var result = await _client.TransferSessionAsync(new nsk.TransferSessionRequest { ContractVersion = _newskiesSettings.ApiContractVersion, tokenRequest = new nsk.TokenRequest { Token = previousSignature, ChannelType = nsk.ChannelType.API, SystemType = nsk.SystemType.WebServicesAPI } }); newSignature = result.TransferSessionResponseData.Signature; } await _sessionBag.SetSignature(newSignature); //await _sessionBag.SetSignature(logonResponse.Signature); await _sessionBag.SetAgentName(logonRequestData.AgentName); await _sessionBag.SetAgentPassword(logonRequestData.Password); var agentInfo = await GetAgentInfo(logonRequestData.AgentName, logonRequestData.DomainCode); await _sessionBag.SetRoleCode(agentInfo.Item1); await _sessionBag.SetOrganizationCode(agentInfo.Item2); await _sessionBag.SetAgentId(agentInfo.Item3); await _sessionBag.SetPersonId(agentInfo.Item4); await _sessionBag.SetCustomerNumber(agentInfo.Item5); return(_mapper.Map <LogonResponse>(logonResponse)); }