Estoy utilizando ArcGIS Engine y el Kit de Desarrollador de 10 en Windows 7. Específicamente, estoy escribiendo una ArcObjects programa de consola de Visual C# 2008 Express.
Estoy intentando conectar a un servidor de imágenes a través de una URL (por ejemplo, http://server/.../ImageServer), pero me da un HRESULT E_FAIL excepción cuando llamo IImageServerLayer.Initialize(). El mensaje completo es "Error HRESULT E_FAIL ha sido devuelto por una llamada a un componente COM." No hay mucha información sobre este error. Algún consejo sobre lo que podría estar equivocado? Aquí está mi código:
using System;
using System.Collections.Generic;
using System.Text;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.DataSourcesRaster;
using ESRI.ArcGIS.GISClient;
namespace EngineConsoleApplication1
{
class Program
{
private static LicenseInitializer m_AOLicenseInitializer = new EngineConsoleApplication1.LicenseInitializer();
[STAThread()]
static void Main(string[] args)
{
//ESRI License Initializer generated code.
m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeEngine },
new esriLicenseExtensionCode[] { esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst, esriLicenseExtensionCode.esriLicenseExtensionCodeNetwork, esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst, esriLicenseExtensionCode.esriLicenseExtensionCodeSchematics, esriLicenseExtensionCode.esriLicenseExtensionCodeMLE, esriLicenseExtensionCode.esriLicenseExtensionCodeDataInteroperability, esriLicenseExtensionCode.esriLicenseExtensionCodeTracking });
//ESRI License Initializer generated code.
//Do not make any call to ArcObjects after ShutDownApplication()
//Create an image server layer by passing a URL.
IImageServerLayer imageserverlayer = new ImageServerLayerClass();
string URL = "http://vega/ArcGIS/rest/services/grandcanyon/ImageServer";
imageserverlayer.Initialize(URL); // "Error HRESULT E_FAIL has been returned from a call to a COM component."
//Get the raster from the image server layer.
IRaster raster = imageserverlayer.Raster;
//The raster from an image server is normally large;
//define the size of the raster.
IRasterProps rasterProps = (IRasterProps)raster;
IEnvelope clipEnvelope = new EnvelopeClass();
clipEnvelope.PutCoords(779000, 9628000, 786000, 9634000);
rasterProps.Extent = clipEnvelope;
rasterProps.Width = 256;
rasterProps.Height = 256;
//Save the clipped raster to the file geodatabase.
ISaveAs saveas = (ISaveAs)raster;
Type factoryType = Type.GetTypeFromProgID(
"esriDataSourcesGDB.FileGDBWorkspaceFactory");
IWorkspaceFactory workspaceFact = (IWorkspaceFactory)Activator.CreateInstance
(factoryType);
IWorkspace workspace = workspaceFact.OpenFromFile(@"c:\temp\fgdb.gdb", 0);
saveas.SaveAs("clipfromimageserverlayer", workspace, "gdb");
m_AOLicenseInitializer.ShutdownApplication();
}
}
}
Este código se basa en http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#//00010000047t000000.
Aquí está la excepción de los detalles de Visual C#'s de diálogo de error:
System.Runtime.InteropServices.COMException was unhandled
Message="Error HRESULT E_FAIL has been returned from a call to a COM component."
Source="ESRI.ArcGIS.Carto"
ErrorCode=-2147467259
StackTrace:
at ESRI.ArcGIS.Carto.ImageServerLayerClass.Initialize(String ServiceURL)
at EngineConsoleApplication1.Program.Main(String[] args) in C:\Users\brown\AppData\Local\Temporary Projects\EngineConsoleApplication1\Program.cs:line 35
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException: