Using ArcGIS 10.1 (Server and Desktop) I've been trying to publish a geoprocessing service based on a python script I wrote. Of course, it all works flawlessly from ArcGIS Desktop but I run into all sorts of problems when publishing.
I'm pretty sure the problem is related to the types of my output parameters or something to that effect. Here's the python script, minus comments and messages to GUI...
import arcpy import json import sys import os from arcpy import env class Result(object): pass out = Result(); arcpy.env.overwriteOutput = True config = arcpy.GetParameterAsText(0) # A string containing a path to a JSON config file source = arcpy.GetParameter(1) # A string containing the name of a layer sWhere = arcpy.GetParameter(2) # A String containig a where clause distan = arcpy.GetParameter(3) # A String containing a distance linear unit target = arcpy.GetParameter(4) # An Array containing multiple layer names try: f = open(config) try: jsonCfg = json.load(f) finally: f.close() except: pass # jsonCfg['connection'] is a path to an SDE connection fc = os.path.join(jsonCfg['connection'], source) scratch = os.path.abspath(jsonCfg['scratch']) arcpy.MakeFeatureLayer_management(fc,"source_lyr") arcpy.SelectLayerByAttribute_management("source_lyr", "NEW_SELECTION", sWhere) bufLyrNam = os.path.join(scratch, "source_buf") arcpy.Buffer_analysis("source_lyr", bufLyrNam, distan) buffer = arcpy.FeatureSet() buffer.load(bufLyrNam) nLayers = len(target) selection =  for i in range(0, nLayers): lyrNam = "target_lyr_" + str(i); tgtNam = os.path.join(jsonCfg['connection'], target[i]) arcpy.MakeFeatureLayer_management(tgtNam, lyrNam) arcpy.SelectLayerByLocation_management(lyrNam, "INTERSECT", bufLyrNam) cpyNam = os.path.join(scratch, target[i].replace(".","")) arcpy.CopyFeatures_management(lyrNam, cpyNam) fs = arcpy.FeatureSet() fs.load(cpyNam) selection.append(fs) out.selection = selection arcpy.SetParameter(5, out)
At first, I wanted to output the "out" object but apparently, this is not allowed in geoprocessing services. I can still publish the service but the output is converted to an unusable string.
I then tried to output only the "buffer" variable (containing a featureset) using an output parameter of type Any Value, Feature Class, Feature Layer... etc. and tried to output the selection variable as a Multiple Value Feature Class with no success.
In fact, something weird happens when I try to output the buffer. Once my service is published, I cannot access its REST endpoint, I always get a error code 500 page. This leaves me thinking that the arcpy.SetParameter must correspond to the output parameter type in order to even access the REST endpoint.
I've been working on this for a couple of days and I'm out of ideas which is why I created an account and asked my question. Can anyone help me figure out the problem here?