Dear All, I'm trying to understand if it's possible to use code developed with ArcObjects SDK for .NET in an environment where only ArcGIS Enterprise (Server+Portal) is installed.
Basically I need to develop a task (as a windows service or as a scheduled task) that periodically extracts data from a geodatabase published by ArcGIS Enterprise.
I planned to use ArcObjects SDK for .NET, but the license initialization code that I'm using is working on my test environment (where ArcMap is installed) but not on the server environment (where ArcGIS Server and ArcGIS Portal are installed).
Any suggestion?
Below the code I'm using to check for the license:
AoInitialize license = null;
try
{
Console.WriteLine("License check started");
var b = RuntimeManager.Bind(ProductCode.Server);
// FAlSE ON BOTH ENVIRONMENTS: dev and produ
Console.WriteLine($"RuntimeManager.Bind(ProductCode.Server): {b} => {w.Elapsed}");
if (!b)
{
// TRUE on dev env and FALSE on prod env
b = RuntimeManager.Bind(ProductCode.Desktop);
Console.WriteLine($"RuntimeManager.Bind(ProductCode.Desktop): {b} => {w.Elapsed}");
}
if (!b)
{
// FALSE on prod env
b = RuntimeManager.Bind(ProductCode.Engine);
Console.WriteLine($"RuntimeManager.Bind(ProductCode.Engine): {b} => {w.Elapsed}");
}
if (!b)
{
const string err = "RuntimeManager failed to bind to any product!";
Console.WriteLine(err);
return;
}
// code not run on production environment
esriLicenseProductCode[] codes = new esriLicenseProductCode[]
{
esriLicenseProductCode.esriLicenseProductCodeArcServer,
esriLicenseProductCode.esriLicenseProductCodeBasic,
esriLicenseProductCode.esriLicenseProductCodeStandard, // detected on dev env
esriLicenseProductCode.esriLicenseProductCodeAdvanced,
esriLicenseProductCode.esriLicenseProductCodeEngine,
esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB,
};
license = new AoInitialize();
foreach (esriLicenseProductCode code in codes)
{
esriLicenseStatus status = license.IsProductCodeAvailable(code);
if (status == esriLicenseStatus.esriLicenseAvailable)
{
Console.WriteLine($"Code '{code}' available... => {w.Elapsed}");
status = license.Initialize(code);
if (status == esriLicenseStatus.esriLicenseAlreadyInitialized ||
status == esriLicenseStatus.esriLicenseCheckedOut)
{
Console.WriteLine($"Code '{code}' initialized => {w.Elapsed}");
break;
}
else
{
Console.WriteLine($"Code '{code}' NOT initialized! => {w.Elapsed}");
}
}
else
{
Console.WriteLine($"Code '{code}' NOT available! => {w.Elapsed}");
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Exception thrown 😞 => {w.Elapsed}");
Console.WriteLine(ex);
}
finally
{
license?.Shutdown();
AOUninitialize.Shutdown();
Console.WriteLine($"Shutdown completed => {w.Elapsed}");
}