Error: "An item with the same key has already been added" when Software Portal Admin opens User Requests
search cancel

Error: "An item with the same key has already been added" when Software Portal Admin opens User Requests

book

Article ID: 220549

calendar_today

Updated On:

Products

Software Management Solution

Issue/Introduction

When the Software Portal Managers try to approve the request, they receive the error:

A problem occurred while loading the Software Portal. Contact IT Helpdesk for assistance

The NS log shows an entry like:

MainController failure.
An item with the same key has already been added.

Steps to Reproduce:

  • Create user security group [IT Users]
  • Add User1 User2
  • Add Manager1 Manager 2
  • All users/managers are in IT Users group
  • User1 reports to Manager1
  • User2 Reports to Manager2
  • Manager2 reports to Manager1
  • Open SoftwarePortal and add IT Users group for both managers
  • Request Software with User2
  • Open SoftwarePortal with Manager1 (or Manager2)
  • Navigate to User Requests page, see the error.

SMP Error:

"6/14/2021 4:55:41 PM","MainController failure.

The given key was not present in the dictionary.
[System.Collections.Generic.KeyNotFoundException @ mscorlib]
at System.ThrowHelper.ThrowKeyNotFoundException()
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at Altiris.SoftwarePortal.Resources.SoftwarePublishingUtil.MatchRequesters(AdUsersSearch helper, Guid managerGuid, Dictionary`2& allManagers, Dictionary`2& requesters, Dictionary`2& matchedReportees)
at Altiris.SoftwarePortal.Resources.SoftwarePublishingUtil.MatchRequesters(AdUsersSearch helper, Guid managerGuid, Dictionary`2& allManagers, Dictionary`2& requesters, Dictionary`2& matchedReportees)
at Altiris.SoftwarePortal.Resources.SoftwarePublishingUtil.FilterManagerSoftwareRequests(DataTable& allRequests, Guid managerGuid, Boolean onlyDirectRequests)
at Symantec.SoftwarePortal.Api.Helpers.SoftwareRequestHelper.GetManagerSoftwareRequests(SoftwareRequestGetContext context, PortalUser user)
at Symantec.SoftwarePortal.Api.Controllers.MainController.GetSoftwareRequests(SoftwareRequestGetContext softwareRequestGetContext)
at lambda_method(Closure , Object , Object[] )
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c_DisplayClass10.<GetExecutor>b_9(Object instance, Object[] methodParameters)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__0.MoveNext()

Exception logged from:
at Symantec.SoftwarePortal.Api.Controllers.ApiControllerExceptionHandler.OnException(System.Web.Http.Filters.HttpActionExecutedContext)
at System.Web.Http.Filters.ExceptionFilterAttribute.OnExceptionAsync(System.Web.Http.Filters.HttpActionExecutedContext, System.Threading.CancellationToken)
at System.Web.Http.Filters.ExceptionFilterAttribute+<ExecuteExceptionFilterAsyncCore>d__0.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<TStateMachine>(TStateMachine&)
at System.Web.Http.Filters.ExceptionFilterAttribute.ExecuteExceptionFilterAsyncCore(System.Web.Http.Filters.HttpActionExecutedContext, System.Threading.CancellationToken)
at System.Web.Http.Filters.ExceptionFilterAttribute.System.Web.Http.Filters.IExceptionFilter.ExecuteExceptionFilterAsync(System.Web.Http.Filters.HttpActionExecutedContext, System.Threading.CancellationToken)
at System.Web.Http.Controllers.ExceptionFilterResult+<ExecuteAsync>d__0.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder<TResult>.Start<TStateMachine>(TStateMachine&)
at System.Web.Http.Controllers.ExceptionFilterResult.ExecuteAsync(System.Threading.CancellationToken)
at System.Web.Http.ApiController.ExecuteAsync(System.Web.Http.Controllers.HttpControllerContext, System.Threading.CancellationToken)
at System.Web.Http.Dispatcher.HttpControllerDispatcher+<SendAsync>d__1.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder<TResult>.Start<TStateMachine>(TStateMachine&)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsync(System.Net.Http.HttpRequestMessage, System.Threading.CancellationToken)
at System.Net.Http.HttpMessageInvoker.SendAsync(System.Net.Http.HttpRequestMessage, System.Threading.CancellationToken)
at System.Web.Http.Dispatcher.HttpRoutingDispatcher.SendAsync(System.Net.Http.HttpRequestMessage, System.Threading.CancellationToken)
at System.Net.Http.DelegatingHandler.SendAsync(System.Net.Http.HttpRequestMessage, System.Threading.CancellationToken)
at Symantec.SoftwarePortal.Api.Controllers.Extensions.ApiControllerAntiForgeryHandler.SendAsync(System.Net.Http.HttpRequestMessage, System.Threading.CancellationToken)
at System.Net.Http.DelegatingHandler.SendAsync(System.Net.Http.HttpRequestMessage, System.Threading.CancellationToken)
at System.Web.Http.HttpServer+<SendAsync>d__0.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder<TResult>.Start<TStateMachine>(TStateMachine&)
at System.Web.Http.HttpServer.SendAsync(System.Net.Http.HttpRequestMessage, System.Threading.CancellationToken)
at System.Net.Http.HttpMessageInvoker.SendAsync(System.Net.Http.HttpRequestMessage, System.Threading.CancellationToken)
at System.Web.Http.WebHost.HttpControllerHandler+<ProcessRequestAsyncCore>d__0.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<TStateMachine>(TStateMachine&)
at System.Web.Http.WebHost.HttpControllerHandler.ProcessRequestAsyncCore(System.Web.HttpContextBase)
at System.Web.TaskAsyncHelper.BeginTask(System.Func<System.Threading.Tasks.Task>, AsyncCallback, Object)
at System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStepImpl(System.Web.HttpApplication+IExecutionStep)
at System.Web.HttpApplication.ExecuteStep(System.Web.HttpApplication+IExecutionStep, Boolean&)
at System.Web.HttpApplication+PipelineStepManager.ResumeSteps(Exception)
at System.Web.HttpApplication.BeginProcessRequestNotification(System.Web.HttpContext, AsyncCallback)
at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest, System.Web.HttpContext)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)
at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr, System.Web.RequestNotificationStatus&)
at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr, System.Web.RequestNotificationStatus&)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)

User [domain\administrator], Auth [domain\manager2], AppDomain [/LM/W3SVC/1/ROOT/Altiris/SoftwarePortal/Api-7-132681618271383073]

HTTP [POST]: http://NSserver.example.com/altiris/softwareportal/api/softwarerequests
ip: [10.0.10.38]; languages: [en-US]; content-length: [118];
timings: [[R] 00:00:00.1405991(W: 00:00:00)];
response: [200 OK]; x-smp-nsversion: [8.6.1119.0];
","Symantec.SoftwarePortal.Api.Controllers.ApiControllerExceptionHandler.OnException","Symantec.SoftwarePortal.Api.dll","529","Errors"

Environment

ITMS 8.6, 8.6 RU1

Cause

Known issue. LDAP search logic needed some adjustments.

Resolution

This issue was fixed in the ITMS 8.6 RU2 release.

A pointfix for those customers with ITMS 8.6 RU1 can be found in KB article CUMULATIVE POST ITMS 8.6 RU1 POINT FIXES