Thanks for your response rlwatson. I got our application working using the binding you suggested and also had to initialize the license. I did not use GP or an SOE and was able to just use arcobjects directly using this method. I have been scouring the ESRI documentation and still feel a little hesitant about this path but it works. I am assuming that the process just checks that the license exists and does not actually tie it up. We can have 20+ users at a time calling this function simultaneously. Essentially I changed our hook into arcobjects from this:
AGSServerConnection ags_connection = GetAGSConnection();
ags_connection.Connect();
IServerObjectManager pSom = ags_connection.ServerObjectManager;
pServerContext = pSom.CreateServerContext("", "");
IWorkspaceFactory pSdeFact = (IWorkspaceFactory)pServerContext.CreateObject("esriDataSourcesGDB.SdeWorkspaceFactory");
to this:
ESRI.ArcGIS.RuntimeManager.Bind(ProductCode.Server);
esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable;
IAoInitialize m_AoInitialize = new AoInitializeClass();
licenseStatus = m_AoInitialize.Initialize (esriLicenseProductCode.esriLicenseProductCodeArcServer);
Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
WorkspaceFactory pSdeFact = (IWorkspaceFactory)Activator.CreateInstance(factoryType);