About the ArcGIS GPConsole Sample
[C#]
Program.cs
using System; using System.Collections.Generic; using System.Text; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Server; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geoprocessor; using ESRI.ArcGIS.Geoprocessing; using ESRI.ArcGIS.Geometry; namespace ArcGIS_GPConsole_CSharp { class Program { private static LicenseInitializer m_AOLicenseInitializer = new ArcGIS_GPConsole_CSharp.LicenseInitializer(); private static string servername = "localhost"; [STAThread] static void Main(string[] args) { bool bInitialized = false; ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop); if (!ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop)) { Console.WriteLine("This application could not load the correct version of ArcGIS."); return; } //ESRI License Initializer generated code. if(m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeArcInfo }, new esriLicenseExtensionCode[]{ })==true) { bInitialized = true; Console.WriteLine("Engine initialized"); Console.WriteLine("License type: " + esriLicenseProductCode.esriLicenseProductCodeArcInfo.ToString()); } else { Console.WriteLine("Engine NOT initialized"); } IServerContext serverContext = null; try { System.Console.WriteLine("Start..."); GISServerConnection serverConnection= new GISServerConnection (); serverConnection.Connect(servername); IServerObjectManager serverManager = serverConnection.ServerObjectManager; serverContext = serverManager.CreateServerContext("", ""); ESRI.ArcGIS.Geoprocessor.Geoprocessor gp = new ESRI.ArcGIS.Geoprocessor.Geoprocessor(serverContext); ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactory ffactory = null; ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactory afactory = null; ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactory sfactory = null; ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactory sdefactory = null; PropertySet sdeServerProperties = null; IFeatureLayer shpflayer = null; IVariantArray varray = null; IFeatureLayer sdeflayer = null; if (gp.IServerContext != null) { System.Console.WriteLine("Server"); ffactory = (ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactory)serverContext.CreateObject("esriDataSourcesGDB.FileGDBWorkspaceFactory"); afactory = (ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactory)serverContext.CreateObject("esriDataSourcesGDB.AccessWorkspaceFactory"); sfactory = (ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactory)serverContext.CreateObject("esriDataSourcesFile.ShapefileWorkspaceFactory"); sdefactory = (ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactory)serverContext.CreateObject("esriDataSourcesGDB.SdeWorkspaceFactory"); sdeServerProperties = (PropertySet)serverContext.CreateObject("esriSystem.PropertySet"); shpflayer = (IFeatureLayer)serverContext.CreateObject("esriCarto.FeatureLayer"); varray = (IVariantArray)serverContext.CreateObject("esriSystem.VarArray"); sdeflayer = (IFeatureLayer)serverContext.CreateObject("esriCarto.FeatureLayer"); } else { System.Console.WriteLine("Local"); if (!bInitialized) { System.Console.WriteLine("Engine license must be initialized."); System.Console.ReadLine(); return; } ffactory = new ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactoryClass(); afactory = new ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass(); sfactory = new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass(); sdefactory = new ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactoryClass(); sdeServerProperties = new PropertySetClass(); shpflayer = new ESRI.ArcGIS.Carto.FeatureLayerClass(); varray = (IVariantArray)new VarArrayClass(); sdeflayer = new ESRI.ArcGIS.Carto.FeatureLayerClass(); } gp.OverwriteOutput = true; ///* Geoprocessor .NET wrapper - Copy Features tool *** ESRI.ArcGIS.DataManagementTools.CopyFeatures copyfeatures = new ESRI.ArcGIS.DataManagementTools.CopyFeatures(); string inputfile = @"C:\Program Files\ArcGIS\DeveloperKit10.0\Samples\data\Usa\USA.gdb"; string inputfeatureclass = "states"; string outputfile = "c:/temp"; string outputfeatureclass = "output.shp"; IFeatureWorkspace fws = (IFeatureWorkspace)ffactory.OpenFromFile(inputfile, 0); IFeatureClass infc = fws.OpenFeatureClass(inputfeatureclass); copyfeatures.in_features = infc; copyfeatures.out_feature_class = @outputfile + "/" + outputfeatureclass; varray.Add(copyfeatures.in_features); varray.Add(copyfeatures.out_feature_class); gp.Execute(copyfeatures.ToolName + "_" + copyfeatures.Alias, varray, null); processGPMessages(gp); /* Work with the IGeoProcessor COM object reference IGeoProcessor igp = gp.IGeoProcessor; IWorkspaceFactory iwf = (IWorkspaceFactory)serverContext.CreateObject("esriGeoprocessing.ToolboxWorkspaceFactory"); IToolboxWorkspace itw = (IToolboxWorkspace)iwf.OpenFromFile(@"c:/Program Files/ArcGIS/ArcToolbox/Toolboxes/", 0); IGPToolbox tbox = (IGPToolbox)itw.OpenToolbox(copyfeatures.ToolboxName); IGPTool tool = (IGPTool)tbox.OpenTool(copyfeatures.ToolName); IArray parameters = tool.ParameterInfo; for (int j = 0; j < parameters.Count; j++) { IGPParameter gparam = (IGPParameter)parameters.get_Element(j); System.Console.WriteLine("Parameter name: " + gparam.Name); System.Console.WriteLine("Parameter Data Type Display Name: " + gparam.DataType.DisplayName); System.Console.WriteLine("Parameter Data Type Name: " + gparam.DataType.Name); System.Console.WriteLine("Is Parameter required?: " + gparam.ParameterType.ToString()); System.Console.WriteLine("Parameter Value Data Type: " + gparam.Value.DataType.Name); System.Console.WriteLine("Parameter Value as Text: " + gparam.Value.GetAsText()); } */ //Use the Geoprocessor with a custom toolbox and model on the server Console.WriteLine("Call Geoprocessor Example"); RunGeoprocessorExample(gp); //Use the IGPServer with a published GP service Console.WriteLine("Call IGPServer Example"); RunGPServerExample(); System.Console.WriteLine("Finish"); Console.ReadLine(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); System.Diagnostics.Debug.WriteLine(ex.StackTrace); } finally { serverContext.ReleaseContext(); if (bInitialized) m_AOLicenseInitializer.ShutdownApplication(); } } static void processGPMessages(Geoprocessor gp) { IGPMessages gpMsgs = gp.IGeoProcessor.GetReturnMessages(); IArray ir = gpMsgs.Messages; int ic = ir.Count; for (int i = 0; i < ic; i++) { Console.WriteLine(gpMsgs.GetMessage(i).Description); } } public static void RunGeoprocessorExample(Geoprocessor gp) { try { IServerContext serverContext = null; if (gp.IServerContext != null) { serverContext = gp.IServerContext; } else { return; } gp.AddToolbox(@"C:\Program Files\ArcGIS\DeveloperKit10.0\Samples\data\GP\RunBuffer\BufferTools.tbx"); gp.SetEnvironmentValue("scratchWorkspace", @"c:/temp"); gp.OverwriteOutput = true; // Need reference to GPTool to get parameter type information IWorkspaceFactory iwf = (IWorkspaceFactory)serverContext.CreateObject("esriGeoprocessing.ToolboxWorkspaceFactory"); IToolboxWorkspace itw = (IToolboxWorkspace)iwf.OpenFromFile(@"C:\Program Files\ArcGIS\DeveloperKit10.0\Samples\data\GP\RunBuffer\", 0); IGPToolbox tbox = (IGPToolbox)itw.OpenToolbox("BufferTools"); IGPTool tool = (IGPTool)tbox.OpenTool("BufferPoints"); IVariantArray varray = (IVariantArray)serverContext.CreateObject("esriSystem.VarArray"); IArray parameters = tool.ParameterInfo; // Iterate through parameters to get data types /*for (int j = 0; j < parameters.Count; j++) { IGPParameter gparam = (IGPParameter)parameters.get_Element(j); System.Console.WriteLine("Parameter name: " + gparam.Name); System.Console.WriteLine("Parameter Data Type Display Name: " + gparam.DataType.DisplayName); System.Console.WriteLine("Parameter Data Type Name: " + gparam.DataType.Name); System.Console.WriteLine("Is Parameter required?: " + gparam.ParameterType.ToString()); System.Console.WriteLine("Parameter Value Data Type: " + gparam.Value.DataType.Name); System.Console.WriteLine("Parameter Value as Text: " + gparam.Value.GetAsText()); }*/ IGPParameter gpp1 = (IGPParameter)parameters.get_Element(0); IGPRecordSet gprecset = (IGPRecordSet)gpp1.Value; IRecordSet rs = gprecset.RecordSet; IFields flds = rs.Fields; int shpfldindex = flds.FindField("Shape"); IField fld = flds.get_Field(shpfldindex); ISpatialReference inputsr = fld.GeometryDef.SpatialReference; IRecordSetInit rsi = (IRecordSetInit)rs; ICursor cur = rsi.Insert(); IRowBuffer rb = rsi.CreateRowBuffer(); IPoint ipnt = (IPoint)serverContext.CreateObject("esriGeometry.Point"); ipnt.PutCoords(1000000, 1000000); rb.set_Value(shpfldindex, ipnt); cur.InsertRow(rb); varray.Add(gprecset); IGPParameter gpp2 = (IGPParameter)parameters.get_Element(1); IGPLinearUnit gpLU = (IGPLinearUnit)serverContext.CreateObject("esriGeoprocessing.GPLinearUnit"); gpLU.Units = ESRI.ArcGIS.esriSystem.esriUnits.esriMeters; gpLU.Value = 100000; varray.Add(gpLU); gp.Execute(tool.Name, varray, null); processGPMessages(gp); } catch (Exception ex) { processGPMessages(gp); System.Diagnostics.Debug.WriteLine(ex.Message); System.Diagnostics.Debug.WriteLine(ex.StackTrace); } } public static void RunGeoprocessorExampleAddServerToolbox() { IServerContext serverContext = null; ESRI.ArcGIS.Geoprocessor.Geoprocessor gp = null; try { GISServerConnection serverConnection; serverConnection = new GISServerConnection(); serverConnection.Connect(servername); IServerObjectManager serverManager = serverConnection.ServerObjectManager; serverContext = serverManager.CreateServerContext("BufferTools", "GPServer"); //* GEOPROCESSOR SECTION gp = new ESRI.ArcGIS.Geoprocessor.Geoprocessor(serverContext); gp.AddToolbox(@"C:\Program Files\ArcGIS\DeveloperKit10.0\Samples\data\GP\RunBuffer\BufferTools.tbx"); gp.SetEnvironmentValue("scratchWorkspace", @"c:/temp"); gp.OverwriteOutput = true; // Need reference to GPTool to get parameter type information IWorkspaceFactory iwf = (IWorkspaceFactory)serverContext.CreateObject("esriGeoprocessing.ToolboxWorkspaceFactory"); IToolboxWorkspace itw = (IToolboxWorkspace)iwf.OpenFromFile(@"C:\Program Files\ArcGIS\DeveloperKit10.0\Samples\data\GP\RunBuffer\RunBuffer", 0); IGPToolbox tbox = (IGPToolbox)itw.OpenToolbox("BufferTools"); IGPTool tool = (IGPTool)tbox.OpenTool("BufferPoints"); IVariantArray varray = (IVariantArray)serverContext.CreateObject("esriSystem.VarArray"); IArray parameters = tool.ParameterInfo; // Iterate through parameters to get data types for (int j = 0; j < parameters.Count; j++) { IGPParameter gparam = (IGPParameter)parameters.get_Element(j); System.Console.WriteLine("Parameter name: " + gparam.Name); System.Console.WriteLine("Parameter Data Type Display Name: " + gparam.DataType.DisplayName); System.Console.WriteLine("Parameter Data Type Name: " + gparam.DataType.Name); System.Console.WriteLine("Is Parameter required?: " + gparam.ParameterType.ToString()); System.Console.WriteLine("Parameter Value Data Type: " + gparam.Value.DataType.Name); System.Console.WriteLine("Parameter Value as Text: " + gparam.Value.GetAsText()); } IGPParameter gpp1 = (IGPParameter)parameters.get_Element(0); IGPRecordSet gprecset = (IGPRecordSet)gpp1.Value; IRecordSet rs = gprecset.RecordSet; IFields flds = rs.Fields; int shpfldindex = flds.FindField("Shape"); IField fld = flds.get_Field(shpfldindex); ISpatialReference inputsr = fld.GeometryDef.SpatialReference; IRecordSetInit rsi = (IRecordSetInit)rs; ICursor cur = rsi.Insert(); IRowBuffer rb = rsi.CreateRowBuffer(); IPoint ipnt = (IPoint)serverContext.CreateObject("esriGeometry.Point"); ipnt.PutCoords(1000000, 1000000); rb.set_Value(shpfldindex, ipnt); cur.InsertRow(rb); varray.Add(gprecset); IGPParameter gpp2 = (IGPParameter)parameters.get_Element(1); IGPLinearUnit gpLU = (IGPLinearUnit)serverContext.CreateObject("esriGeoprocessing.GPLinearUnit"); gpLU.Units = ESRI.ArcGIS.esriSystem.esriUnits.esriMeters; gpLU.Value = 100000; varray.Add(gpLU); gp.Execute(tool.Name, varray, null); processGPMessages(gp); } catch (Exception ex) { processGPMessages(gp); System.Diagnostics.Debug.WriteLine(ex.Message); System.Diagnostics.Debug.WriteLine(ex.StackTrace); } finally { serverContext.ReleaseContext(); } } public static void RunGPServerExample() { IServerContext serverContext = null; try { GISServerConnection serverConnection; serverConnection = new GISServerConnection(); serverConnection.Connect(servername); IServerObjectManager serverManager = serverConnection.ServerObjectManager; serverContext = serverManager.CreateServerContext("BufferTools", "GPServer"); IGPServer gpserver = (IGPServer)serverContext.ServerObject; string taskname = "BufferPoints"; IGPToolInfo task = gpserver.GetToolInfo(taskname); IGPValues taskvals = (IGPValues)serverContext.CreateObject("esriGeoprocessing.GPValues"); IGPParameterInfos paramInfos = task.ParameterInfo; IGPParameterInfo paramInfo; string parameterNameString = string.Empty; for (int i = 0; i < paramInfos.Count; i++) { // Data type available as part of IGPParameterInfo paramInfo = paramInfos.get_Element(i); taskvals.Add(paramInfo.Value); //Add to parameter name array parameterNameString += paramInfo.Name; if (i != paramInfos.Count - 1) parameterNameString += ";"; } IGPRecordSet gprecset = (IGPRecordSet)taskvals.get_Element(0); IQueryFilter qf = (IQueryFilter)serverContext.CreateObject("esriGeodatabase.QueryFilter"); gprecset.RecordSet.Table.DeleteSearchedRows(qf); IRecordSet rs = gprecset.RecordSet; IFields flds = rs.Fields; int shpfldindex = flds.FindField("Shape"); IField fld = flds.get_Field(shpfldindex); ISpatialReference inputsr = fld.GeometryDef.SpatialReference; IRecordSetInit rsi = (IRecordSetInit)rs; ICursor cur = rsi.Insert(); IRowBuffer rb = rsi.CreateRowBuffer(); IPoint ipnt = (IPoint)serverContext.CreateObject("esriGeometry.Point"); ipnt.PutCoords(1000000, 1000000); rb.set_Value(shpfldindex, ipnt); cur.InsertRow(rb); IGPValues invals = (IGPValues)serverContext.CreateObject("esriGeoprocessing.GPValues"); invals.Add((IGPValue)gprecset); IGPLinearUnit gpLU = (IGPLinearUnit)serverContext.CreateObject("esriGeoprocessing.GPLinearUnit"); gpLU.Units = ESRI.ArcGIS.esriSystem.esriUnits.esriMeters; gpLU.Value = 1000000; invals.Add((IGPValue)gpLU); string JobID = gpserver.SubmitJob(taskname, invals); while (gpserver.GetJobStatus(JobID) != esriJobStatus.esriJobSucceeded) { System.Threading.Thread.Sleep(5000); } IStringArray stringArray = (IStringArray)new ESRI.ArcGIS.esriSystem.StrArrayClass(); foreach (string paramName in parameterNameString.Split(';')) { stringArray.Add(paramName); } /* GetJobResult(): second parameter can be: * IStringArray of all parameters * IStringArray of only output parameters * null if you want all output parameters */ //The resultant featureclass gets generated in folder uner <C:\arcgisserver\arcgisJobs\<abd9930839dg9330123 IGPResult result = gpserver.GetJobResult(JobID, stringArray, null); if (result.Messages != null) { IJobMessages jobMsgs = result.Messages; for (int i = 0; i < jobMsgs.Count; i++) { Console.WriteLine(jobMsgs.get_Element(i).Description); } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); System.Diagnostics.Debug.WriteLine(ex.StackTrace); } finally { serverContext.ReleaseContext(); } } } }
[Visual Basic .NET]
Program.vb
Imports Microsoft.VisualBasic Imports System Imports System.Collections.Generic Imports System.Text Imports ESRI.ArcGIS.Carto Imports ESRI.ArcGIS.esriSystem Imports ESRI.ArcGIS.Server Imports ESRI.ArcGIS.Geodatabase Imports ESRI.ArcGIS.Geoprocessor Imports ESRI.ArcGIS.Geoprocessing Imports ESRI.ArcGIS.Geometry Public Class Program Private Shared m_AOLicenseInitializer As LicenseInitializer = New LicenseInitializer() Private Shared servername As String = "localhost" <STAThread()> _ Shared Sub Main(ByVal args() As String) Dim bInitialized As Boolean = False ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop) If (Not ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop)) Then Console.WriteLine("This application could not load the correct version of ArcGIS.") Return End If 'ESRI License Initializer generated code. If m_AOLicenseInitializer.InitializeApplication(New esriLicenseProductCode() {esriLicenseProductCode.esriLicenseProductCodeArcInfo}, New esriLicenseExtensionCode() {}) = True Then bInitialized = True Console.WriteLine("Engine initialized") Console.WriteLine("License type: " & esriLicenseProductCode.esriLicenseProductCodeArcInfo.ToString()) Else Console.WriteLine("Engine NOT initialized") End If Dim serverContext As IServerContext = Nothing Try System.Console.WriteLine("Start...") Dim serverConnection As GISServerConnection serverConnection = New GISServerConnection() serverConnection.Connect(servername) Dim serverManager As IServerObjectManager = serverConnection.ServerObjectManager serverContext = serverManager.CreateServerContext("", "") Dim gp As New ESRI.ArcGIS.Geoprocessor.Geoprocessor(serverContext) Dim ffactory As ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactory = Nothing Dim afactory As ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactory = Nothing Dim sfactory As ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactory = Nothing Dim sdefactory As ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactory = Nothing Dim sdeServerProperties As PropertySet = Nothing Dim shpflayer As IFeatureLayer = Nothing Dim varray As IVariantArray = Nothing Dim sdeflayer As IFeatureLayer = Nothing If gp.IServerContext IsNot Nothing Then System.Console.WriteLine("Server") ffactory = CType(serverContext.CreateObject("esriDataSourcesGDB.FileGDBWorkspaceFactory"), ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactory) afactory = CType(serverContext.CreateObject("esriDataSourcesGDB.AccessWorkspaceFactory"), ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactory) sfactory = CType(serverContext.CreateObject("esriDataSourcesFile.ShapefileWorkspaceFactory"), ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactory) sdefactory = CType(serverContext.CreateObject("esriDataSourcesGDB.SdeWorkspaceFactory"), ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactory) sdeServerProperties = CType(serverContext.CreateObject("esriSystem.PropertySet"), PropertySet) shpflayer = CType(serverContext.CreateObject("esriCarto.FeatureLayer"), IFeatureLayer) varray = CType(serverContext.CreateObject("esriSystem.VarArray"), IVariantArray) sdeflayer = CType(serverContext.CreateObject("esriCarto.FeatureLayer"), IFeatureLayer) Else System.Console.WriteLine("Local") If (Not bInitialized) Then System.Console.WriteLine("Engine license must be initialized.") System.Console.ReadLine() Return End If ffactory = New ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactoryClass() afactory = New ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass() sfactory = New ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass() sdefactory = New ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactoryClass() sdeServerProperties = New PropertySetClass() shpflayer = New ESRI.ArcGIS.Carto.FeatureLayerClass() varray = CType(New VarArrayClass(), IVariantArray) sdeflayer = New ESRI.ArcGIS.Carto.FeatureLayerClass() End If gp.OverwriteOutput = True '''* Geoprocessor .NET wrapper - Copy Features tool *** Dim copyfeatures As New ESRI.ArcGIS.DataManagementTools.CopyFeatures() Dim inputfile As String = "C:\Program Files\ArcGIS\DeveloperKit10.0\Samples\data\Usa\USA.gdb" Dim inputfeatureclass As String = "states" Dim outputfile As String = "c:/temp" Dim outputfeatureclass As String = "output.shp" Dim fws As IFeatureWorkspace = CType(ffactory.OpenFromFile(inputfile, 0), IFeatureWorkspace) Dim infc As IFeatureClass = fws.OpenFeatureClass(inputfeatureclass) copyfeatures.in_features = infc copyfeatures.out_feature_class = outputfile & "/" & outputfeatureclass varray.Add(copyfeatures.in_features) varray.Add(copyfeatures.out_feature_class) gp.Execute(copyfeatures.ToolName & "_" & copyfeatures.Alias, varray, Nothing) processGPMessages(gp) ' Work with the IGeoProcessor COM object reference 'IGeoProcessor igp = gp.IGeoProcessor; 'IWorkspaceFactory iwf = (IWorkspaceFactory)serverContext.CreateObject("esriGeoprocessing.ToolboxWorkspaceFactory"); 'IToolboxWorkspace itw = (IToolboxWorkspace)iwf.OpenFromFile(@"c:/Program Files/ArcGIS/ArcToolbox/Toolboxes/", 0); 'IGPToolbox tbox = (IGPToolbox)itw.OpenToolbox(copyfeatures.ToolboxName); 'IGPTool tool = (IGPTool)tbox.OpenTool(copyfeatures.ToolName); 'IArray parameters = tool.ParameterInfo; 'for (int j = 0; j < parameters.Count; j++) '{ ' IGPParameter gparam = (IGPParameter)parameters.get_Element(j); ' System.Console.WriteLine("Parameter name: " + gparam.Name); ' System.Console.WriteLine("Parameter Data Type Display Name: " + gparam.DataType.DisplayName); ' System.Console.WriteLine("Parameter Data Type Name: " + gparam.DataType.Name); ' System.Console.WriteLine("Is Parameter required?: " + gparam.ParameterType.ToString()); ' System.Console.WriteLine("Parameter Value Data Type: " + gparam.Value.DataType.Name); ' System.Console.WriteLine("Parameter Value as Text: " + gparam.Value.GetAsText()); '} ' 'Use the Geoprocessor with a custom toolbox and model on the server Console.WriteLine("Call Geoprocessor Example") RunGeoprocessorExample(gp) 'Use the IGPServer with a published GP service Console.WriteLine("Call IGPServer Example") RunGPServerExample() System.Console.WriteLine("Finish") Console.ReadLine() Catch ex As Exception System.Diagnostics.Debug.WriteLine(ex.Message) System.Diagnostics.Debug.WriteLine(ex.StackTrace) Finally serverContext.ReleaseContext() If bInitialized Then m_AOLicenseInitializer.ShutdownApplication() End If End Try End Sub Private Shared Sub processGPMessages(ByVal gp As ESRI.ArcGIS.Geoprocessor.Geoprocessor) Dim gpMsgs As IGPMessages = gp.IGeoProcessor.GetReturnMessages() Dim ir As IArray = gpMsgs.Messages Dim ic As Integer = ir.Count For i As Integer = 0 To ic - 1 Console.WriteLine(gpMsgs.GetMessage(i).Description) Next i End Sub Public Shared Sub RunGeoprocessorExample(ByVal gp As ESRI.ArcGIS.Geoprocessor.Geoprocessor) Try Dim serverContext As IServerContext = Nothing If gp.IServerContext IsNot Nothing Then serverContext = gp.IServerContext Else Return End If gp.AddToolbox("C:\Program Files\ArcGIS\DeveloperKit10.0\Samples\data\GP\RunBuffer\BufferTools.tbx") gp.SetEnvironmentValue("scratchWorkspace", "c:/temp") gp.OverwriteOutput = True ' Need reference to GPTool to get parameter type information Dim iwf As IWorkspaceFactory = CType(serverContext.CreateObject("esriGeoprocessing.ToolboxWorkspaceFactory"), IWorkspaceFactory) Dim itw As IToolboxWorkspace = CType(iwf.OpenFromFile("C:\Program Files\ArcGIS\DeveloperKit10.0\Samples\data\GP\RunBuffer\", 0), IToolboxWorkspace) Dim tbox As IGPToolbox = CType(itw.OpenToolbox("BufferTools"), IGPToolbox) Dim tool As IGPTool = CType(tbox.OpenTool("BufferPoints"), IGPTool) Dim varray As IVariantArray = CType(serverContext.CreateObject("esriSystem.VarArray"), IVariantArray) Dim parameters As IArray = tool.ParameterInfo 'Iterate through parameters to get data types 'for (int j = 0; j < parameters.Count; j++) '{ ' IGPParameter gparam = (IGPParameter)parameters.get_Element(j); ' System.Console.WriteLine("Parameter name: " + gparam.Name); ' System.Console.WriteLine("Parameter Data Type Display Name: " + gparam.DataType.DisplayName); ' System.Console.WriteLine("Parameter Data Type Name: " + gparam.DataType.Name); ' System.Console.WriteLine("Is Parameter required?: " + gparam.ParameterType.ToString()); ' System.Console.WriteLine("Parameter Value Data Type: " + gparam.Value.DataType.Name); ' System.Console.WriteLine("Parameter Value as Text: " + gparam.Value.GetAsText()); '} Dim gpp1 As IGPParameter = CType(parameters.Element(0), IGPParameter) Dim gprecset As IGPRecordSet = CType(gpp1.Value, IGPRecordSet) Dim rs As IRecordSet = gprecset.RecordSet Dim flds As IFields = rs.Fields Dim shpfldindex As Integer = flds.FindField("Shape") Dim fld As IField = flds.Field(shpfldindex) Dim inputsr As ISpatialReference = fld.GeometryDef.SpatialReference Dim rsi As IRecordSetInit = CType(rs, IRecordSetInit) Dim cur As ICursor = rsi.Insert() Dim rb As IRowBuffer = rsi.CreateRowBuffer() Dim ipnt As IPoint = CType(serverContext.CreateObject("esriGeometry.Point"), IPoint) ipnt.PutCoords(1000000, 1000000) rb.Value(shpfldindex) = ipnt cur.InsertRow(rb) varray.Add(gprecset) Dim gpp2 As IGPParameter = CType(parameters.Element(1), IGPParameter) Dim gpLU As IGPLinearUnit = CType(serverContext.CreateObject("esriGeoprocessing.GPLinearUnit"), IGPLinearUnit) gpLU.Units = ESRI.ArcGIS.esriSystem.esriUnits.esriMeters gpLU.Value = 100000 varray.Add(gpLU) gp.Execute(tool.Name, varray, Nothing) processGPMessages(gp) Catch ex As Exception processGPMessages(gp) System.Diagnostics.Debug.WriteLine(ex.Message) System.Diagnostics.Debug.WriteLine(ex.StackTrace) End Try End Sub Public Shared Sub RunGeoprocessorExampleAddServerToolbox() Dim serverContext As IServerContext = Nothing Dim gp As ESRI.ArcGIS.Geoprocessor.Geoprocessor = Nothing Try Dim serverConnection As GISServerConnection serverConnection = New GISServerConnection() serverConnection.Connect(servername) Dim serverManager As IServerObjectManager = serverConnection.ServerObjectManager serverContext = serverManager.CreateServerContext("BufferTools", "GPServer") '* GEOPROCESSOR SECTION gp = New ESRI.ArcGIS.Geoprocessor.Geoprocessor(serverContext) gp.AddToolbox("C:\Program Files\ArcGIS\DeveloperKit10.0\Samples\data\GP\RunBuffer\BufferTools.tbx") gp.SetEnvironmentValue("scratchWorkspace", "c:/temp") gp.OverwriteOutput = True ' Need reference to GPTool to get parameter type information Dim iwf As IWorkspaceFactory = CType(serverContext.CreateObject("esriGeoprocessing.ToolboxWorkspaceFactory"), IWorkspaceFactory) Dim itw As IToolboxWorkspace = CType(iwf.OpenFromFile("C:\Program Files\ArcGIS\DeveloperKit10.0\Samples\data\GP\RunBuffer\RunBuffer", 0), IToolboxWorkspace) Dim tbox As IGPToolbox = CType(itw.OpenToolbox("BufferTools"), IGPToolbox) Dim tool As IGPTool = CType(tbox.OpenTool("BufferPoints"), IGPTool) Dim varray As IVariantArray = CType(serverContext.CreateObject("esriSystem.VarArray"), IVariantArray) Dim parameters As IArray = tool.ParameterInfo ' Iterate through parameters to get data types For j As Integer = 0 To parameters.Count - 1 Dim gparam As IGPParameter = CType(parameters.Element(j), IGPParameter) System.Console.WriteLine("Parameter name: " & gparam.Name) System.Console.WriteLine("Parameter Data Type Display Name: " & gparam.DataType.DisplayName) System.Console.WriteLine("Parameter Data Type Name: " & gparam.DataType.Name) System.Console.WriteLine("Is Parameter required?: " & gparam.ParameterType.ToString()) System.Console.WriteLine("Parameter Value Data Type: " & gparam.Value.DataType.Name) System.Console.WriteLine("Parameter Value as Text: " & gparam.Value.GetAsText()) Next j Dim gpp1 As IGPParameter = CType(parameters.Element(0), IGPParameter) Dim gprecset As IGPRecordSet = CType(gpp1.Value, IGPRecordSet) Dim rs As IRecordSet = gprecset.RecordSet Dim flds As IFields = rs.Fields Dim shpfldindex As Integer = flds.FindField("Shape") Dim fld As IField = flds.Field(shpfldindex) Dim inputsr As ISpatialReference = fld.GeometryDef.SpatialReference Dim rsi As IRecordSetInit = CType(rs, IRecordSetInit) Dim cur As ICursor = rsi.Insert() Dim rb As IRowBuffer = rsi.CreateRowBuffer() Dim ipnt As IPoint = CType(serverContext.CreateObject("esriGeometry.Point"), IPoint) ipnt.PutCoords(1000000, 1000000) rb.Value(shpfldindex) = ipnt cur.InsertRow(rb) varray.Add(gprecset) Dim gpp2 As IGPParameter = CType(parameters.Element(1), IGPParameter) Dim gpLU As IGPLinearUnit = CType(serverContext.CreateObject("esriGeoprocessing.GPLinearUnit"), IGPLinearUnit) gpLU.Units = ESRI.ArcGIS.esriSystem.esriUnits.esriMeters gpLU.Value = 100000 varray.Add(gpLU) gp.Execute(tool.Name, varray, Nothing) processGPMessages(gp) Catch ex As Exception processGPMessages(gp) System.Diagnostics.Debug.WriteLine(ex.Message) System.Diagnostics.Debug.WriteLine(ex.StackTrace) Finally serverContext.ReleaseContext() End Try End Sub Public Shared Sub RunGPServerExample() Dim serverContext As IServerContext = Nothing Try Dim serverConnection As GISServerConnection serverConnection = New GISServerConnection() serverConnection.Connect(servername) Dim serverManager As IServerObjectManager = serverConnection.ServerObjectManager serverContext = serverManager.CreateServerContext("BufferTools", "GPServer") Dim gpserver As IGPServer = CType(serverContext.ServerObject, IGPServer) Dim taskname As String = "BufferPoints" Dim task As IGPToolInfo = gpserver.GetToolInfo(taskname) Dim taskvals As IGPValues = CType(serverContext.CreateObject("esriGeoprocessing.GPValues"), IGPValues) Dim paramInfos As IGPParameterInfos = task.ParameterInfo Dim paramInfo As IGPParameterInfo Dim parameterNameString As String = String.Empty For i As Integer = 0 To paramInfos.Count - 1 ' Data type available as part of IGPParameterInfo paramInfo = paramInfos.Element(i) taskvals.Add(paramInfo.Value) 'Add to parameter name array parameterNameString &= paramInfo.Name If i <> paramInfos.Count - 1 Then parameterNameString &= ";" End If Next i Dim gprecset As IGPRecordSet = CType(taskvals.Element(0), IGPRecordSet) Dim qf As IQueryFilter = CType(serverContext.CreateObject("esriGeodatabase.QueryFilter"), IQueryFilter) gprecset.RecordSet.Table.DeleteSearchedRows(qf) Dim rs As IRecordSet = gprecset.RecordSet Dim flds As IFields = rs.Fields Dim shpfldindex As Integer = flds.FindField("Shape") Dim fld As IField = flds.Field(shpfldindex) Dim inputsr As ISpatialReference = fld.GeometryDef.SpatialReference Dim rsi As IRecordSetInit = CType(rs, IRecordSetInit) Dim cur As ICursor = rsi.Insert() Dim rb As IRowBuffer = rsi.CreateRowBuffer() Dim ipnt As IPoint = CType(serverContext.CreateObject("esriGeometry.Point"), IPoint) ipnt.PutCoords(1000000, 1000000) rb.Value(shpfldindex) = ipnt cur.InsertRow(rb) Dim invals As IGPValues = CType(serverContext.CreateObject("esriGeoprocessing.GPValues"), IGPValues) invals.Add(CType(gprecset, IGPValue)) Dim gpLU As IGPLinearUnit = CType(serverContext.CreateObject("esriGeoprocessing.GPLinearUnit"), IGPLinearUnit) gpLU.Units = ESRI.ArcGIS.esriSystem.esriUnits.esriMeters gpLU.Value = 1000000 invals.Add(CType(gpLU, IGPValue)) Dim JobID As String = gpserver.SubmitJob(taskname, invals) Do While gpserver.GetJobStatus(JobID) <> esriJobStatus.esriJobSucceeded System.Threading.Thread.Sleep(5000) Loop Dim stringArray As IStringArray = CType(New ESRI.ArcGIS.esriSystem.StrArrayClass(), IStringArray) For Each paramName As String In parameterNameString.Split(";"c) stringArray.Add(paramName) Next paramName 'The resultant featureclass gets generated in folder uner <C:\arcgisserver\arcgisJobs\<abd9930839dg9330123 Dim result As IGPResult = gpserver.GetJobResult(JobID, stringArray, Nothing) If result.Messages IsNot Nothing Then Dim jobMsgs As IJobMessages = result.Messages For i As Integer = 0 To jobMsgs.Count - 1 Console.WriteLine(jobMsgs.Element(i).Description) Next i End If Catch ex As Exception System.Diagnostics.Debug.WriteLine(ex.Message) System.Diagnostics.Debug.WriteLine(ex.StackTrace) Finally serverContext.ReleaseContext() End Try End Sub End Class