Hi, I have a pretty uncertain error when asking for UserInfo from IServerEnvironment from EnvironmentManager class.
System.InvalidCastException: Unable to cast object of type 'System.__ComObject' to type 'ESRI.ArcGIS.esriSystem.EnvironmentManagerClass'.
EnvironmentManager environmentManager = new EnvironmentManager();
UID environmentUid = new UID { Value = "{32d4c328-e473-4615-922c-63c108f55e60}" };
var environment = (IServerEnvironment3)environmentManager.GetEnvironment(environmentUid);
It fails at the first line.
My environment is Server 10.6.1 with Portal and Windows credentials SSO from our domain.
Sometimes it works, most of the time it fails. I'm pretty desperate, I hate these uncertain COM errors.
Solved! Go to Solution.
Hi Petr Diviš
We recently ran into this as well with a SOE developed in VB .Net for v10.4.1 (and confirmed it was also working in 10.5.1). We found a resolution detailed below
Here was the original code functioning in 10.4.1/10.5.1:
    Friend Function GetCurrentUser() As String
        Try
            Dim myGUID As Guid = Marshal.GenerateGuidForType(GetType(IServerEnvironment))
            Dim myUID As New ESRI.ArcGIS.esriSystem.UID
            myUID.Value = myGUID.ToString("B")
            Dim pEnvMgr As IEnvironmentManager = New EnvironmentManager
            Dim pServEnv As IServerEnvironment2 = pEnvMgr.GetEnvironment(myUID)
            Dim sUser As String = ""
            sUser = pServEnv.UserInfo.Name
            Return sUser
        Catch ex As Exception
            Return "Current user not found."
        End Try
    End FunctionAnd was throwing the following exception for line 7:
Unable to cast object of type 'System.__ComObject' to type 'ESRI.ArcGIS.esriSystem.EnvironmentManagerClass'
A colleague of mine found this BUG - BUG-000102447: The EnvironmentManager singleton object in the Serve..
And we translated that to VB .Net:
    Friend Function GetCurrentUser() As String
        Try
            Dim myGUID As Guid = Marshal.GenerateGuidForType(GetType(IServerEnvironment))
            Dim myUID As New ESRI.ArcGIS.esriSystem.UID
            myUID.Value = myGUID.ToString("B")
            ' Issues with original 10.5.1 code implementation - https://support.esri.com/en/technical-article/000011331
            'Dim pEnvMgr As IEnvironmentManager = New EnvironmentManager()
            Dim t As Type = Type.GetTypeFromProgID("esriSystem.EnvironmentManager")
            Dim obj As System.Object = Activator.CreateInstance(t)
            Dim pEnvMgr As IEnvironmentManager = obj
            Dim pServEnv As IServerEnvironment2 = pEnvMgr.GetEnvironment(myUID)
            Dim sUser As String = ""
            sUser = pServEnv.UserInfo.Name
            Return sUser
        Catch ex As Exception
            Return "Current user not found... " & ex.ToString()After a re-build, deploy, test/debug session we confirmed our logged in user information was available again in the SOE.
*whew* ... we were quite worried we found a critical show stopper to our 10.6.1 upgrade efforts as getting the logged in user is critical for a few of our SOE's
Hope this helps.
Hi Petr Diviš
We recently ran into this as well with a SOE developed in VB .Net for v10.4.1 (and confirmed it was also working in 10.5.1). We found a resolution detailed below
Here was the original code functioning in 10.4.1/10.5.1:
    Friend Function GetCurrentUser() As String
        Try
            Dim myGUID As Guid = Marshal.GenerateGuidForType(GetType(IServerEnvironment))
            Dim myUID As New ESRI.ArcGIS.esriSystem.UID
            myUID.Value = myGUID.ToString("B")
            Dim pEnvMgr As IEnvironmentManager = New EnvironmentManager
            Dim pServEnv As IServerEnvironment2 = pEnvMgr.GetEnvironment(myUID)
            Dim sUser As String = ""
            sUser = pServEnv.UserInfo.Name
            Return sUser
        Catch ex As Exception
            Return "Current user not found."
        End Try
    End FunctionAnd was throwing the following exception for line 7:
Unable to cast object of type 'System.__ComObject' to type 'ESRI.ArcGIS.esriSystem.EnvironmentManagerClass'
A colleague of mine found this BUG - BUG-000102447: The EnvironmentManager singleton object in the Serve..
And we translated that to VB .Net:
    Friend Function GetCurrentUser() As String
        Try
            Dim myGUID As Guid = Marshal.GenerateGuidForType(GetType(IServerEnvironment))
            Dim myUID As New ESRI.ArcGIS.esriSystem.UID
            myUID.Value = myGUID.ToString("B")
            ' Issues with original 10.5.1 code implementation - https://support.esri.com/en/technical-article/000011331
            'Dim pEnvMgr As IEnvironmentManager = New EnvironmentManager()
            Dim t As Type = Type.GetTypeFromProgID("esriSystem.EnvironmentManager")
            Dim obj As System.Object = Activator.CreateInstance(t)
            Dim pEnvMgr As IEnvironmentManager = obj
            Dim pServEnv As IServerEnvironment2 = pEnvMgr.GetEnvironment(myUID)
            Dim sUser As String = ""
            sUser = pServEnv.UserInfo.Name
            Return sUser
        Catch ex As Exception
            Return "Current user not found... " & ex.ToString()After a re-build, deploy, test/debug session we confirmed our logged in user information was available again in the SOE.
*whew* ... we were quite worried we found a critical show stopper to our 10.6.1 upgrade efforts as getting the logged in user is critical for a few of our SOE's
Hope this helps.
